strSql = "select * from table where field1 = @field1 and field2 like '%@field2%'"
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = this.conn;//conn是已经建好的连接,是可以用的,绝对没问题
cmd.CommandText = strSql;
cmd.Parameters.Add("@field1",OleDbType.VarChar,50);
cmd.Parameters.Add("@field2",OleDbType.VarChar,50);
cmd.Parameters["@field1"].Value = "str1";
cmd.Parameters["@field2"].Value = "str2";
this.Open();
cmd.ExecuteNonQuery();
this.Close();这个SQL搜索不出数据,我也试过另外的拼装形式,都搜索不出数据,如下:
strSql = "select * from table where field1 = @field1 and field2 like '@field2'"
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = this.conn;//conn是已经建好的连接,是可以用的,绝对没问题
cmd.CommandText = strSql;
cmd.Parameters.Add("@field1",OleDbType.VarChar,50);
cmd.Parameters.Add("@field2",OleDbType.VarChar,50);
cmd.Parameters["@field1"].Value = "str1";
cmd.Parameters["@field2"].Value = “%”+"str2"+“%”;
this.Open();
cmd.ExecuteNonQuery();
this.Close();又或者:
strSql = "select * from table where field1 = @field1 and field2 like @field2"
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = this.conn;//conn是已经建好的连接,是可以用的,绝对没问题
cmd.CommandText = strSql;
cmd.Parameters.Add("@field1",OleDbType.VarChar,50);
cmd.Parameters.Add("@field2",OleDbType.VarChar,50);
cmd.Parameters["@field1"].Value = "str1";
cmd.Parameters["@field2"].Value = “'%”+"str2"+“%'”;
this.Open();
cmd.ExecuteNonQuery();
this.Close();也不行,试过用*号代替%号还是不行,请大家帮忙看看,指教指教,谢谢!
开发工具是VS.NET2005,开发语言是C#,做的是WINFORM.
另外,如果不用模糊搜索,纯粹的A=变量A,这样就可以搜索出数据。
如果用模糊搜索,但是不使用Parameters,而是直接把变量拼接到SQL中,也可以搜索出正确数据。

解决方案 »

  1.   

    strSql = @"select * from table where field1 = @field1 and 
    field2 like '%' + @field2 + '%'"
      

  2.   

    用*代替%或者换  ANSI 92 规范后压缩修复数据库,重新打开,可以用%
      

  3.   

    据我所知,在类似like的模式查询中不能使用参数,即你语句中的@field,同样在 in 自居中好像也不行。
      

  4.   

    引号是发贴的时候弄错的。
    BigIdiot628,能解释一下为什么在最前面加@吗?那样写的话,没有在双引号内,C#会认得吗?cnzjsxwine,你说的是真的吗?
      

  5.   

    BigIdiot628,你说的完全正确,我刚实验的,谢谢了
      

  6.   

    String .Format(....field2 like '%{0}%', param[0].Value)
      

  7.   

       DataSet ds = cod.RunProcReturn((string.Format("select * from tb_product where (type1 like '%{0}%'or type2 like '%{0}%') and en=1 order by auditing desc, product_id desc", param[0].Value)), param, "tb_product");
    自己修改一下  这是我写的