String   strSQL="select   *   from   Threads   where   Subject   like  @Subject";   
        //   创建Command对象cm   
        SqlCommand   cm=new   SqlCommand(strSQL,cn);   
        //   添加一个参数   
        cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
        //   给参数赋值   
        cm.Parameters["@Subject"].Value=   "%"   +   Subject.Text   +   "%"   ;                 
        //   打开连接   
        cn.Open();   
如果改成
String   strSQL="select   *   from   Threads   where   Subject   like  '@Subject'";   
        //   创建Command对象cm   
        SqlCommand   cm=new   SqlCommand(strSQL,cn);   
        //   添加一个参数   
        cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
        //   给参数赋值   
        cm.Parameters["@Subject"].Value=   "%"   +   Subject.Text   +   "%"   ;                 
        //   打开连接   
        cn.Open();   
倒是不报错了,但却查不到数据,请大家指导一下!

解决方案 »

  1.   

    这样修改一下:String   strSQL="select *  from Threads where Subject   like  '%@Subject%'";  
    cm.Parameters["@Subject"].Value=    Subject.Text  ; 你将%增加到参数的值那里肯定有问题的了,在事件探测器中捕获一下运行时的sql语句你就明白了
      

  2.   

    调试下吧,把Subject.Text的值直接拼到SQL里,去数据库查 ,看有没有数据!
      

  3.   

    你在Sql事件探测器中查看运行中的Sql语句
      

  4.   

    对like,不能使用参数,只能直接拼sql执行。
      

  5.   


    飞龙兄,like可以使用参数的。楼主这样修改一下:
    String  strSQL="select *  from Threads where Subject  like  '%'@Subject'%'";  
      

  6.   


    检查过了,都是文本型(access数据库),字长50
      

  7.   


    系统报错,语法错误 (操作符丢失) 在查询表达式 Subject  like  '%'@Subject'%'中。
      

  8.   

    我也没怎么看明白楼主的意思。但我觉得你使用了变量,但是没有declare吧?先声明变量再使用。
    本人也很菜…
      

  9.   

    不好意思,写错了String  strSQL="select *  from Threads where Subject  like  '%'+ @Subject + '%'";  
      

  10.   


    我用的是access数据库,不知道怎么使用事件探测器
      

  11.   

    Access用OleDbCommand这个类 不要用SQLCommand
      

  12.   

    Access里like的通配符用法是这样:      “?”表示任何单一字符; “*”表示零个或多个字符; “#”表示任何一个数字      所以应该是:           //   给参数赋值   
            cm.Parameters["@Subject"].Value=   "*"   +   Subject.Text   +   "*"   ;       SQL SERVER 里是用%%的,在ACCESS里是用**号的,肯定找不到数据! 
      

  13.   


    是的,我就是用的oledb这个
      

  14.   

    我一直都是这么写的
    string strsql="select * from users where username like @username";
      

  15.   

    还有就是ACCESS的参数不是按名称来的 
    你加参数时要注意顺序 
      

  16.   

    不行的,,,
    無法在like中添加變量的
    在SQL中也無法運行
      

  17.   

    String  strSQL="select *  from Threads where Subject  like  '%"+@Subject+"%'";  
      

  18.   

    28楼的 为什么我的都能运行
    我用的就是SQL2005+VS2008
      

  19.   


    是啊,我到网上查了相关资料,应该这样就可以的,不知道为什么到了我这里就是调试不出来!郁闷!难道是access文本型数据跟varchar型数据有冲突?
      

  20.   

    ACCESS的通配符和SQL的不一样
      

  21.   

     like @username
    赋值的时候
    Cmd.Parameters["@KeyWord"].Value = "%" + StrKeyWord + "%";
      

  22.   

    "select * from tablename where a like "+"'subject'"
      

  23.   

    Cmd.Parameters["@KeyWord"].Value = "%" + StrKeyWord + "%";
    这里应该不是用%
    %是SQL的
      

  24.   


    String   strSQL="select   *   from   Threads   where   Subject   like  @Subject";   
            //   创建Command对象cm   
            SqlCommand   cm=new   SqlCommand(strSQL,cn);   
            //   添加一个参数   
            cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
            //   给参数赋值   
            cm.Parameters["@Subject"].Value=   "'%"   +   Subject.Text   +   "%'"   ;                 
            //   打开连接   
            cn.Open();   
      

  25.   


    String   strSQL="select   *   from   Threads   where   Subject   like  @Subject";   
            //   创建Command对象cm   
            SqlCommand   cm=new   SqlCommand(strSQL,cn);   
            //   添加一个参数   
            cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
            //   给参数赋值   
            cm.Parameters[0].Value=   "'%"   +   Subject.Text   +   "%'"   ;                 
            //   打开连接   
            cn.Open();   
      

  26.   

            String   strSQL="select   *   from   Threads   where   Subject   like  @Subject";   
            //   创建Command对象cm   
            SqlCommand   cm=new   SqlCommand(strSQL,cn);   
            //   添加一个参数   
            cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
            //   给参数赋值   
            cm.Parameters["Subject"].Value=   "%"   +   Subject.Text   +   "%"   ;                 
            //   打开连接   
            cn.Open();   这样试试
      

  27.   

    我想,like后面的参数是不能加引号的,因为加了引号,就代表参数变成了一个固定字符串了----like '@name',应该在赋值时进行采用"%"+name+"%"或者"*"+name+"*",再或者写成"'%"+name+"%'"
    但,都试过了,都不行,要么报错说参数没指定值,要么就是查不到数据库里的数据!真的快疯了,邪门儿了简直!

      

  28.   

    String  strSQL="select  *  from  Threads  where  Subject  like  @Subject";  
            //  创建Command对象cm  
            OleDbCommand  cm=new  OleDbCommand(strSQL,cn);  
            //  添加一个参数  
            cm.Parameters.Add(new  SqlParameter("Subject",SqlDbType.NVarChar,40));  
            //  给参数赋值  
            cm.Parameters["Subject"].Value=  "%"  +  Subject.Text.Trim()  +  "%"  ;                
            //  打开连接  
            cn.Open();  我刚刚用ACCESS测试了一下 就这样 可以执行的
      

  29.   

    System.Data.OleDb.OleDbConnection con=new System.Data.OleDb.OleDbConnection(Common.Config.Connect.OleConnection);
                con.Open();
                string strSql="select * from users where username like @username";
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strSql,con);
                cmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("username", "%leo%"));
                System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Response.Write(dr[0]);
                }
    我就这样写的 查出2条记录 
      

  30.   

    本地测试已经通过,lz可以参考下代码:                using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connStr"].ToString()))
                    {
                        string sql = "select * from tbUser where name like @Subject";
                        using (SqlCommand cmd = new SqlCommand(sql, conn))
                        {
                            string str = "%" + Label1.Text + "%";
                            cmd.Parameters.AddWithValue("@Subject", str);
                            conn.Open();
                            SqlDataAdapter sda = new SqlDataAdapter(cmd);
                            DataSet ds = new DataSet();
                            sda.Fill(ds);
                            GridView1.DataSource = ds;
                            GridView1.DataBind();
                        }
                    }
      

  31.   

    晕死,怎么是Access数据库,上面的代码是sql数据库的
      

  32.   

    如果直接使用+  Subject.Text  +字符串的话,就能查到数据,但这样数据不够安全,所以才用的传参方式,结果却成了这样!郁闷
      

  33.   

    试试:
    String   strSQL="select   *   from   Threads   where   Subject   like '%'+ @Subject+'%'"; 
            //   创建Command对象cm   
            SqlCommand   cm=new   SqlCommand(strSQL,cn);   
            //   添加一个参数   
            cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
            //   给参数赋值   
            cm.Parameters["@Subject"].Value=   Subject.Text;                 
            //   打开连接   
            cn.Open();  
    http://www.mybuffet.cn
      

  34.   

    String   strSQL="select   *   from   Threads   where   Subject   like  %@Subject%";   
            //   创建Command对象cm   
            SqlCommand   cm=new   SqlCommand(strSQL,cn);   
            //   添加一个参数   
            cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
            //   给参数赋值   
            cm.Parameters["@Subject"].Value= Subject.Text;  
                   
            //   打开连接   
            cn.Open();   
      

  35.   

    String   strSQL="select   *   from   Threads   where   Subject   like  @Subject";   
            //   创建Command对象cm   
            SqlCommand   cm=new   SqlCommand(strSQL,cn);   
            //   添加一个参数   
            cm.Parameters.Add(new   SqlParameter("@Subject",SqlDbType.NVarChar,40));   
            //   给参数赋值   
            cm.Parameters["@Subject"].Value=   "*"   +   Subject.Text   +   "*"   ;                 
            //   打开连接   
            cn.Open();