2016-03-05 2 views
0

У меня есть раскрывающийся список, который заполняется семестрами. Когда выбор семестра изменяется, я хочу заполнить еще один раскрывающийся список курсами, доступными для этого семестра, на основе семестраID. У меня есть хранимая процедура на SQL Server, которая получает курсы на основе параметра semesterId. Список семестров заполняется просто отлично, но когда я выбираю семестр, я получаю сообщение об ошибке при использовании SP для получения курсов. Ошибка говорит Procedure or function 'GetCourses' expects parameter '@semesterId', which was not supplied., даже если я поставлю значение для @semesterId, прежде чем открывать соединение. Что я делаю не так?Процедура ожидает параметр, который не был указан в ASP C#

protected void Page_Load(object sender, EventArgs e) 
     { 
      if(!IsPostBack) 
       PopulateSemesterList(); 
     } 

     private void PopulateSemesterList() 
     { 
      string connstring; 
      connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString; 
      SqlConnection conn = new SqlConnection(connstring); 

      SqlCommand cmd = new SqlCommand("dbo.GetSemesters", conn); 
      conn.Open(); 

      DDSemesters.DataSource = cmd.ExecuteReader(); 
      DDSemesters.DataTextField = "semesterName"; 
      DDSemesters.DataValueField = "semesterId"; 
      this.DataBind(); 

      conn.Close(); 
      conn.Dispose(); 

      DDSemesters.Items.Insert(0, new ListItem("Select Semester", "0")); 
      DDSemesters.SelectedIndex = 0; 
     } 

     protected void DDSemesters_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      DropDownList DDSemesters = sender as DropDownList; 

      int selectedSemester = Convert.ToInt32(DDSemesters.SelectedItem.Value); 

      string connstring; 
      connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString; 
      SqlConnection conn = new SqlConnection(connstring); 

      SqlCommand cmd = new SqlCommand("dbo.GetCourses", conn); 
      cmd.Parameters.Add(new SqlParameter("@semesterId", selectedSemester)); 

      conn.Open(); 

      DDCourses.DataSource = cmd.ExecuteReader(); 
      DDCourses.DataTextField = "courseName"; 
      DDCourses.DataValueField = "courseId"; 
      this.DataBind(); 

      conn.Close(); 
      conn.Dispose(); 

      DDCourses.Items.Insert(0, new ListItem("Select Course", "0")); 
      DDCourses.SelectedIndex = 0; 
      DDCourses.Visible = true; 
      CoursesLbl.Visible = true; 
     } 

ответ

0

Насколько я могу сказать, ваш CommandType по умолчанию, Text, что приводит к CommandText быть истолковано как SQL запроса, а не просто имя хранимой процедуры.

Вы хотите, чтобы установить его в StoredProcedure вместо:

cmd.CommandType = CommandType.StoredProcedure; 

В качестве альтернативы вы могли бы сделать вашу команду полный SQL запрос, который правильно передает параметры хранимой процедуры.

Смежные вопросы