none
必须声明变量 '@ST2' RRS feed

  • 问题

  • protected void btnResearch_Click(object sender, EventArgs e)
    
    
    
    
    
    
    
        {
    
    
    
    
    
    
    
            string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    
    
    
    
    
    
    
            DataSet ds = new DataSet();
    
    
    
    
    
    
    
            SqlConnection conn = new SqlConnection(connStr);
    
    
    
    
    
    
    
            if (conn.State.ToString() == "Closed")
    
    
    
    
    
    
    
                conn.Open();
    
    
    
    
    
    
    
            string SchoolStr = "", DepartStr = "", SpecialStr = "", GradeStr="";
    
    
    
    
    
    
    
            Session["SearchStr"] = @"select ST2.*,DT.DepartID,DT.DepartName,ST.SpecialtyID,ST.SpecialtyName,GT.*
    
    
    
    
    
    
    
                                   from SchoolTable as ST2 ,DepartTable as DT,SpecialtyTable as ST,GradeTable as GT
    
    
    
    
    
    
    
                                   where ST2.SchoolID=DT.SchoolID
    
    
    
    
    
    
    
                                     and DT.DepartID=ST.DepartID";
    
    
    
    
    
    
    
            if (DropDownList1.SelectedValue.ToString() != "")
    
    
    
    
    
    
    
            {
    
    
    
    
    
    
    
                SchoolStr = " and ST2.SchoolID=@ST2.SchoolID";
    
    
    
    
    
    
    
                Session["SearchStr"] = Session["SearchStr"] + SchoolStr;
    
    
    
    
    
    
    
                if (DropDownList2.SelectedValue.ToString() != "")
    
    
    
    
    
    
    
                {
    
    
    
    
    
    
    
                    DepartStr = "and DT.DepartID=@DT.DepartID";
    
    
    
    
    
    
    
                    Session["SearchStr"] = Session["SearchStr"] + DepartStr;
    
    
    
    
    
    
    
                    if (DropDownList3.SelectedValue.ToString() != "")
    
    
    
    
    
    
    
                    {
    
    
    
    
    
    
    
                        SpecialStr = "and ST.SpecialtyID=@ST.SpecialtyID";
    
    
    
    
    
    
    
                        Session["SearchStr"] = Session["SearchStr"] + SpecialStr;
    
    
    
    
    
    
    
                        if (DropDownList4.SelectedValue.ToString() != "")
    
    
    
    
    
    
    
                        {
    
    
    
    
    
    
    
                            GradeStr = "and GT.GradeID=@GT.GradeID";
    
    
    
    
    
    
    
                            Session["SearchStr"] = Session["SearchStr"] + GradeStr;
    
    
    
    
    
    
    
                        }
    
    
    
    
    
    
    
                    }
    
    
    
    
    
    
    
                }
    
    
    
    
    
    
    
            }
    
    
    
    
    
    
    
            string SearchStr = Session["SearchStr"].ToString();
    
    
    
    
    
    
    
            try
    
    
    
    
    
    
    
            {
    
    
    
    
    
    
    
                SqlCommand comm = new SqlCommand(SearchStr, conn);
    
    
    
    
    
    
    
                comm.Parameters.AddWithValue("@ST2.SchoolID", this.DropDownList1.SelectedValue);
    
    
    
    
    
    
    
                comm.Parameters.AddWithValue("@DT.DepartID", this.DropDownList2.SelectedValue);
    
    
    
    
    
    
    
                comm.Parameters.AddWithValue("@ST.SpecialtyID", this.DropDownList3.SelectedValue);
    
    
    
    
    
    
    
                comm.Parameters.AddWithValue("@GT.GradeID", this.DropDownList4.SelectedValue);
    
    
    
    
    
    
    
                comm.ExecuteNonQuery();
    
    
    
    
    
    
    
                comm.Dispose();
    
    
    
    
    
    
    
                SqlDataAdapter da = new SqlDataAdapter(SearchStr, conn);
    
    
    
    
    
    
    
               
    
    
    
    
    
    
    
                da.Fill(ds);
    
    
    
    
    
    
    
                if (conn.State.ToString() == "Open")
    
    
    
    
    
    
    
                    conn.Close();
    
    
    
    
    
    
    
                GridView1.DataSource = ds;
    
    
    
    
    
    
    
                GridView1.DataBind();
    
    
    
    
    
    
    
            }
    
    
    
    
    
    
    
            catch (Exception ex)
    
    
    
    
    
    
    
            {
    
    
    
    
    
    
    
                Response.Write("数据库错误,错误原因:" + ex.Message);
    
    
    
    
    
    
    
                Response.End();
    
    
    
    
    
    
    
            }
    
    
    
    
    
    
    
            finally
    
    
    
    
    
    
    
            {
    
    
    
    
    
    
    
                if (conn.State.ToString() == "Open")
    
    
    
    
    
    
    
                    conn.Close();
    
    
    
    
    
    
    
            }
    
    
    
    
    
    
    
                                     
    
    
    
    
    
    
    
    }
    
    
    
    
    
    
    
    
    必须声明变量 '@ST2',不知道错在哪了?
    2010年2月4日 7:34

答案

  • 你把声明@XX.XXXX  把中间的点.去掉看看 比如@ST2SchoolID
    2010年2月4日 8:50
  • 两位前辈,我按你们的方法试了一下,结果出现了这个错误:数据库错误,错误原因:必须声明变量 '@STSchoolIDand'


    会不会是我写的程序出现了问题!


    如果报这样的错误,就说明你在 Sql 字符串中声明了 @STSchoolIDand 参数,但又没给对应的 Command 的 Parameters 添加 @STSchoolIDand 的声明。

    知识改变命运,奋斗成就人生!
    2010年2月5日 1:03
    版主

全部回复

  • 你把声明@XX.XXXX  把中间的点.去掉看看 比如@ST2SchoolID
    2010年2月4日 8:50
  • 你好!

    点号在 SQL 中有特殊含义,你这里把参数名中的点号去掉或换成下划线。

    知识改变命运,奋斗成就人生!
    2010年2月4日 9:15
    版主
  • 两位前辈,我按你们的方法试了一下,结果出现了这个错误:数据库错误,错误原因:必须声明变量 '@STSchoolIDand'


    会不会是我写的程序出现了问题!

    2010年2月4日 11:19
  • 两位前辈,我按你们的方法试了一下,结果出现了这个错误:数据库错误,错误原因:必须声明变量 '@STSchoolIDand'


    会不会是我写的程序出现了问题!


                comm.Parameters.AddWithValue("@ST2.SchoolID", this.DropDownList1.SelectedValue);



                comm.Parameters.AddWithValue("@DT.DepartID", this.DropDownList2.SelectedValue);



                comm.Parameters.AddWithValue("@ST.SpecialtyID", this.DropDownList3.SelectedValue);



                comm.Parameters.AddWithValue("@GT.GradeID", this.DropDownList4.SelectedValue);

    这些确定够了吗 或者改了没


    2010年2月4日 13:30
  • 两位前辈,我按你们的方法试了一下,结果出现了这个错误:数据库错误,错误原因:必须声明变量 '@STSchoolIDand'


    会不会是我写的程序出现了问题!


                comm.Parameters.AddWithValue("@ST2.SchoolID", this.DropDownList1.SelectedValue);



                comm.Parameters.AddWithValue("@DT.DepartID", this.DropDownList2.SelectedValue);



                comm.Parameters.AddWithValue("@ST.SpecialtyID", this.DropDownList3.SelectedValue);



                comm.Parameters.AddWithValue("@GT.GradeID", this.DropDownList4.SelectedValue);

    这些确定够了吗 或者改了没



    我改了,还是出现了上述的错误,所以我又再次使用了SQL的拼串方法来解决了上述问题!
    2010年2月4日 18:36
  • 两位前辈,我按你们的方法试了一下,结果出现了这个错误:数据库错误,错误原因:必须声明变量 '@STSchoolIDand'


    会不会是我写的程序出现了问题!


    如果报这样的错误,就说明你在 Sql 字符串中声明了 @STSchoolIDand 参数,但又没给对应的 Command 的 Parameters 添加 @STSchoolIDand 的声明。

    知识改变命运,奋斗成就人生!
    2010年2月5日 1:03
    版主
  • o ,原来如此!
    2010年2月5日 2:22
  • 我在今天的系统开发中遇到了一个新的问题:两个GridView之间的数据转移;我已经将其贴出来了,希望前辈有空的时候,好好的帮我看一下,这个问题我之前没碰到过,上网搜了一下,也没搜到,所以要麻烦一下前辈了,因为代码比较长,估计会耽误您一些时间,请您见谅!
    2010年2月6日 11:59