SqlDataSource1.ConnectionString = ConfigurationManager.ConnectionStrings["connstr"].ToString();
  string presql = "select * from test where ";
  presql += " createdate >= @startdate and createdate< @enddate ";
  SqlDataSource1.SelectCommand = presql.ToString();
  SqlDataSource1.SelectParameters.Add("@startdate", txtKdate.Text.ToString());
  SqlDataSource1.SelectParameters.Add("@enddate", txtJdate.Text.ToString());gridview1.datasource=SqlDataSource1;
gridview1.DataBind(); 这样的语句运行时会提示我
必须声明变量 '@startdate'
必须声明变量 '@enddate'我用事件探查器查到的sql语句是这样的
exec sp_executesql N'select * from test where createdate >= @startdate and createdate< @enddate', N'@@sheetid nvarchar(12)', @@startdate = N'2011-11-01',@@enddate=N'2011-12-01'
这个语句在查询分析器里执行确实是提示要声明变量请问这要怎么改啊?

解决方案 »

  1.   

    string presql = "select * from test where ";
      presql += " createdate >= '"+txtKdate.Text.ToString()+"' 
           and createdate< '"+txtJdate.Text.ToString()+"'";
    直接拼吧,不要参数化了
      

  2.   

     也可以利用字符串拼接组成一个长一点的完整的SQL查询语句,这样就不用在用到SqlDataSource1.SelectParameters.Add了。看你的习惯了。
      

  3.   

    SQL语句中要用DECLARE 声明这两个变量
      

  4.   

    否则Add这个方法找不到对应的变量
      

  5.   

    SqlDataSource1.SelectParameters.Add("@startdate", txtKdate.Text.ToString());
    是不是不需要@符号的?