string sql1 = "(select ID,CTitle  as name,DTime ,table1='news' from Detailed where CTitle like @Title1) UNION ALL (select ID,CName as name,DTime,table1='product' from Product where CName like @Title2)";
                OleDbParameter[] Params = { new OleDbParameter("@Title1", "%" + Request.QueryString["Svalue"].ToString() + "%"), new OleDbParameter("@Title2", "%" + Request.QueryString["Svalue"].ToString() + "%") };
                DataTable dt = DBHelper.GetDataTable(sql1, Params);
                Repeater1.DataSource = dt.DefaultView;
                Repeater1.DataBind();报至少一个参数没有被指定值。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。源错误: 
行 152:            cmd.Parameters.AddRange(values);
行 153:            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
行 154:            da.Fill(ds);
行 155:            return ds.Tables[0];
行 156:        }
 

解决方案 »

  1.   

    按理说应该是对的 
    不过我也出现过楼主同意的问题   SQL里可以运行  ACCESS不行
    会不会ACCESS参数化查询不支持 like
    ACCESS参数化比较特殊 如参数的顺序和使用的顺序必须一致
      

  2.   

    应该用?代替@Title,%前后要加'
    string sql1 = "(select ID,CTitle as name,DTime ,table1='news' from Detailed where CTitle like ?) UNION ALL (select ID,CName as name,DTime,table1='product' from Product where CName like ?)";
      OleDbParameter[] Params = { new OleDbParameter("?", "'%" + Request.QueryString["Svalue"].ToString() + "%'"), new OleDbParameter("?", "'%" + Request.QueryString["Svalue"].ToString() + "%'") };
      

  3.   

    呵呵 
      参数化模糊查询
     昨天我刚问过得到答案 
      StringBuilder strSql = new StringBuilder();
      strSql.Append("select count(1) from tbl_City");
      strSql.Append(" where c_Name like @c_Name+'%' ");
      OleDbParameter[] parameters = {
      new OleDbParameter("@c_Name", name)
      };