代码如下:
SqlConnection con=db.CreateConnection();
con.Open();
string sqlStr="select sum(id)/@i from bbs_Topic where t_class=@i";
SqlCommand selectCmd=new SqlCommand(sqlStr,con);
selectCmd.Parameters.Add(new SqlParameter("@i",SqlDbType.Int));
selectCmd.Parameters["@i"].Value=System.Convert.ToInt16(Session["id1"]);
DataSet ds=new DataSet();
SqlDataAdapter da=new SqlDataAdapter(sqlStr,con);
da.Fill(ds);
当填充DataSet时报错:必须声明变量 '@i'。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 必须声明变量 '@i'。

解决方案 »

  1.   


    SqlConnection con = db.CreateConnection(); 
    con.Open(); 
    string sqlStr="select sum(id)/@i1 from bbs_Topic where t_class=@i2";
    SqlCommand selectCmd = new SqlCommand(sqlStr,con);
    selectCmd.Parameters.Add(new SqlParameter("@i1",SqlDbType.Int));
    selectCmd.Parameters.Add(new SqlParameter("@i2",SqlDbType.Int));
    selectCmd.Parameters["@i1"].Value = System.Convert.ToInt16(Session["id1"]);
    selectCmd.Parameters["@i2"].Value = System.Convert.ToInt16(Session["id1"]);
    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(sqlStr,con);
    da.Fill(ds);
    ^o^ 不支持这种处理方式, 要分开操作...
      

  2.   

    ^o^ 漏了两句...
    SqlConnection con = db.CreateConnection();
    con.Open();
    string sqlStr = "select sum(id)/@i1 from bbs_Topic where t_class=@i2";
    SqlCommand selectCmd = new SqlCommand(sqlStr, con);
    selectCmd.Parameters.Add(new SqlParameter("@i1", SqlDbType.Int));
    selectCmd.Parameters.Add(new SqlParameter("@i2", SqlDbType.Int));
    selectCmd.Parameters["@i1"].Value = System.Convert.ToInt16(Session["id1"]);
    selectCmd.Parameters["@i2"].Value = System.Convert.ToInt16(Session["id1"]);
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = selectCmd;
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
      

  3.   

    问题在这里
    SqlDataAdapter   da=new   SqlDataAdapter(sqlStr,con); 
    --------------
    在这里SqlDataAdapter类的两个参数为sql命令字符串和sqlconnection对象.
    而LZ的参数是加在SqlCommand对象当中,在上面的代码当中,selectCmd和da对象根本没有建立起联系
    所以他会提示参数未定义
    ----

    SqlDataAdapter   da=new   SqlDataAdapter(sqlStr,con); 
    da.Fill(ds); 
    改为SqlDataAdapter   da=new   SqlDataAdapter(selectCmd); 
    da.Fill(ds); 就行了
      

  4.   

    没错。。symbol441  
      

  5.   

    首先感谢 ≮西门潇洒≯,你的方法我试了,确实没有了错误,因此决定给你最高分,
    再次感谢  簡簡單單..我想要说的是你的方法我我在没法贴子之前就试了,但是也还是不行,因为这跟数学里是一样的,X就是Y,Y就是X,呵呵,因此给你一点鼓励分