我想根据文本框输入的三个条件查询我觉得我的sql语句写错了,不知道怎么改 private void btn_search_Click(object sender, EventArgs e)
        {                   
            DataTable dt = ReceiptsList().Tables[0];
            dGVReceipts.DataSource = dt;
            dGVReceipts.Refresh();
        }        public  DataSet ReceiptsList()
        {
            DataSet ds = new DataSet();
            SqlConnection sqlConn = new SqlConnection("Data Source=KCNQHd1458\\TFS_INSTANCE;Initial Catalog=Receipts;User ID=devtest;PWD=test123 ");
            string strSQL = "select * from Receipts where ReportNo=  @RecNo   or  Branch= @RecBr  or Account=  @RecAc ";
            SqlCommand sqlcmd = new SqlCommand(strSQL, sqlConn);
            sqlcmd.Parameters.AddWithValue("@RecNo", txtReportID.Text);
            sqlcmd.Parameters.AddWithValue("@RecBr", txtCustomer.Text);
            sqlcmd.Parameters.AddWithValue("@RecAc", comAccount.Text);
            return GetDataSet(strSQL);        }文本可视化工具显示是这句
select * from Receipts where ReportNo=  @RecNo   or  Branch= @RecBr  or Account=  @RecAc 

解决方案 »

  1.   

    string strSQL = "select * from Receipts where ReportNo="+ @RecNo+" or Branch="+ @RecBr+" or Account= "+@RecAc;试试看
      

  2.   

    Must declare the scalar variable "@RecNo".
      

  3.   

    加上双引号 就出语法错误了 当前上下文不存在@RecNo
      

  4.   

    string strSQL = "select * from Receipts where ReportNo=‘+ @RecNo+’ or Branch=‘+ @RecBr+’ or Account= ‘+@RecAc’;
    提示
    Error converting data type varchar to bigint.
    错误求解什么原因造成的
      

  5.   

    楼主 原因是bigint长整型数据类型转换为varchar数据类型出现错误
     你改成string strSQL = "select * from Receipts where ReportNo='"+ @RecNo +"' or Branch='"+ @RecBr+"' or Account='"+@RecAc"';
    试试注意引号
      

  6.   

    先把参数转为int看看,可能有空格或者不能转为int型
      

  7.   

    我晕,需要声明啊
    declare @RecNo
      

  8.   

    string strSQL = "select * from Receipts where ReportNo='"+ @RecNo +"' or Branch='"+ @RecBr+"' or Account='"+ @RecAc +"';
    刚才后面掉了个+号
      

  9.   

    GetDataSet()
      我看下这个方法
      

  10.   

       绑定GridView 是用这个么 GridView1.Refresh()??
      换这个看看 GridView1.DataBind();
      

  11.   

    你这个是存储过程?
    需要声明变量
    declare @RecNo
      

  12.   

    这样写就好了cmd.Parameters.Add("RecNo", SqlDbType.NVarChar, 20).Value = txtReportID.Text;
      

  13.   

    这样写就好了cmd.Parameters.Add("@RecNo", SqlDbType.NVarChar, 20).Value = txtReportID.Text;
     
     
      

  14.   

    上面少了东西,这样写就好了cmd.Parameters.Add("@RecNo", SqlDbType.NVarChar, 20).Value = txtReportID.Text;
     
     
      

  15.   

    我已经解决了 我觉得那个cmd.Parameters.Add(我的编译器提示这个过时了?但不是错误 求解释)
    sqlcmd.Parameters.AddWithValue
    这两个我似乎不是很懂
    追加上去 我的程序不认识
    我干脆没用这个直接 "select * from Receipts where ReportNo=  '" + txtReportID.Text + "'   or  Branch= '" + txtBranch.Text + "'  or Account=  '"+comAccount.Text+"' "这样虽然看起来乱点 但是脑子里清楚 
    函数太多 初学 认不过来 
      

  16.   

    return GetDataSet(strSQL);
    我就想说楼主你这个函数传参怎么会传入strSQL呢应该是上面的sqlcmd  不然你哪些给cmd赋值的代码就白写了
    所以楼主你从这里去思考应该就可以找到了
      

  17.   

    string strSQL = "select * from Receipts where ReportNo='"+ @RecNo +"' or Branch='"+ @RecBr+"' or Account='"+ @RecAc +"';
      

  18.   

    return GetDataSet(strSQL);
    明显是这句有问题,你把strSQL传给  GetDataSet(strSQL);有什么用啊? 你前面写的cmd多作废了啊
      

  19.   

    sqlcmd.Parameters.Add("@RecNo", SqlDbType.Int).Value = txtReportID.Text;
    sqlcmd.Parameters.AddWithValue("@RecBr", SqlDbType.NVarChar).Value= txtCustomer.Text;
    sqlcmd.Parameters.AddWithValue("@RecAc",SqlDbType.NVarChar).Value= comAccount.Text;红色是你数据库里这个字段的数据类型
      

  20.   


    SqlCommand sqlcmd = new SqlCommand(strSQL, sqlConn);
     string strSQL = "select * from Receipts where @RecNo or  @RecBr or @RecAc ";
      SqlParameter[] parameters = {
                            new SqlParameter("@RecNo", txtReportID.Text),
                            new SqlParameter("@RecBr", txtCustomer.Text),
                            new SqlParameter("@RecAc", comAccount.Text)};
    parameters[0].Value = txtReportID.Text;
                            parameters[0].Value = txtCustomer.Text;
                            parameters[0].Value = comAccount.Text;
            GetDataSet(strSQL,parameters);