2016-03-05 28 views
0

我有一個填充了學期的下拉列表。當學期選擇改變時,我想根據學期ID填寫另一個可用於該學期的下拉列表。我在SQL Server中有一個存儲過程,它根據semesterId參數獲取課程。學期列表填寫得很好,但是當我選擇一個學期時,在使用SP獲取課程時出現錯誤。即使我在打開連接之前提供了@semesterId的值,該錯誤仍然顯示爲Procedure or function 'GetCourses' expects parameter '@semesterId', which was not supplied.。我究竟做錯了什麼?程序期望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查詢。

相關問題