Database
        #region 将命令文本添加到SQLDataReaderr(有返回值)
        /// <summary>
        /// 创建一个SqlDataReader对象
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="prams"></param>
        /// <param name="tbName"></param>
        /// <returns></returns>
        public SqlDataReader CreateDataReaderTwo(string procName, SqlParameter[] prams, string tbName) ///返回DataReader对象
        {
            this.Open();
            SqlCommand cmd = new SqlCommand(procName, con);
            SqlDataReader sdr = cmd.ExecuteReader();
            return sdr;
        }
        #endregionDal
        public SqlDataReader FindTeacherByDepts(MODAL.tblTeachers tblTeachers ,string tbName)
        {
            SqlParameter[] prams ={
                    data.MakeInParam("@DeptID",SqlDbType.VarChar,4,tblTeachers.Deptid),
                                  };            return (data.CreateDataReaderTwo("select * from tbl_Teachers where DeptID like @DeptID", prams, tbName));
        }From
        public void AddTeachersDisplay()
        {
            ModTeachers.Deptid = DeptsID;
            SqlDataReader Read = DalTeachers.FindTeacherByDepts(ModTeachers,"MODAL.tblTeachers");
            while (Read.Read())
                TeacherNameBox.Items.Add(Read["TeacherName"].ToString());
            Read.Close();
        }出现问题,必须声明标量变量 "@DeptID"。请问要如何改才能正确呢?

解决方案 »

  1.   

    return (data.CreateDataReaderTwo("select * from tbl_Teachers where DeptID like @DeptID", prams, tbName));
    like需要的是具体的值。或者用string.format();可以将prams里面的值传进去。
      

  2.   


    public SqlDataReader CreateDataReaderTwo(string procName, string tbName) ///返回DataReader对象
            {
                this.Open();
                SqlCommand cmd = new SqlCommand(procName, con);
                SqlDataReader sdr = cmd.ExecuteReader();
                return sdr;
            } public SqlDataReader FindTeacherByDepts(MODAL.tblTeachers tblTeachers ,string tbName)
            {
                return (data.CreateDataReaderTwo("select * from tbl_Teachers where DeptID ='"+tblTeachers.Deptid+"'",tbName));
            }
      

  3.   

    #region 将命令文本添加到SQLDataReaderr(有返回值)
            /// <summary>
            /// 创建一个SqlDataReader对象
            /// </summary>
            /// <param name="procName"></param>
            /// <param name="prams"></param>
            /// <param name="tbName"></param>
            /// <returns></returns>
            public SqlDataReader CreateDataReaderTwo(string procName, SqlParameter[] prams, string tbName) ///返回DataReader对象
            {
                this.Open();
                SqlCommand cmd = new SqlCommand(procName, con);
                cmd.Parameters.AddRange(prams);
                SqlDataReader sdr = cmd.ExecuteReader();
                return sdr;
            }
            #endregion
      

  4.   


    ModTeachers.Deptid = DeptsID;
    DeptsID是具体的值,通过一个comboBox传入
      

  5.   

    prams参数 没有使用 
    这样 
     public SqlDataReader CreateDataReaderTwo(string procName, SqlParameter[] prams, string tbName) ///返回DataReader对象
            {
                this.Open();
                SqlCommand cmd = new SqlCommand(procName, con);
                cmd.Parameters.AddRange(prams);
                SqlDataReader sdr = cmd.ExecuteReader();
                return sdr;
            }
      

  6.   

    三楼正解,连接数据库传入参数是要用sqlcommand 对象的Parameters.AddRange(prams)或者
    Parameters.Add(pram)   我要没记错前面的那个AddRange(prams)应该是数组,后面的Add(pram)是给个单个值!这样就可以给你的字符串语句的参数传入值了!希望能帮到你!