2017-10-18 27 views
-2

請幫助我 - 如何編寫使用存儲過程獲取數據的代碼?如何編寫用於在classFile中執行存儲過程的C#代碼

我得到一個錯誤,因爲不是所有的代碼返回一個值:

public IEnumerable<Employee> GetEmployee() 
{ 
    string sc = ConfigurationManager.ConnectionStrings["ContextDb"].ConnectionString; 

    using (SqlConnection con = new SqlConnection(sc)) 
    { 
     SqlCommand cmd = new SqlCommand("Sp_GetEmployee", con); 
     cmd.CommandType = CommandType.StoredProcedure; 

     con.Open(); 

     SqlDataReader rdr = cmd.ExecuteReader(); 

     while (rdr.Read()) 
     { 
      Employee Emp = new Employee(); 
      Emp.Emp_Id = Convert.ToInt32(rdr["Emp_Id"]); 
      Emp.EmpName = rdr[("EmpName")].ToString(); 
     } 
    } 
} 
+0

u需要什麼這裏 –

+0

這裏即時得到不是所有的代碼編寫 –

+2

你'沒有返回任何東西 – spodger

回答

4

那麼,你的代碼幾乎是正確的。您需要添加一些using語句,當然還有,有返回值:

public IEnumerable<Employee> GetEmployee(){ 
    var employees = new List<Employee>(); 
    string sc = ConfigurationManager.ConnectionStrings["ContextDb"].ConnectionString; 

    using (var con = new SqlConnection(sc)) 
    { 
     using (var cmd = new SqlCommand("Sp_GetEmployee", con)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      con.Open(); 
      using (var rdr = cmd.ExecuteReader()) 
      { 
       while (rdr.Read()) 
       { 
        var Emp = new Employee(); 
        Emp.Emp_Id = Convert.ToInt32(rdr["Emp_Id"]); // what if it's DBNull? 
        Emp.EmpName = rdr[("EmpName")].ToString(); // what if it's DBNull? 
        employees.Add(Emp); 
       } 
      } 
     } 

    } 
    return employees; 
} 
+0

這裏的員工數量正在成爲零 –

+0

Soo對不起,這裏你提到了Emp.Emp_Id = Convert.ToInt32(rdr [「Emp_Id」]); //如果它爲空會怎麼樣?我如何處理 –

+0

您可以使用'DataReader.IsDBNull'方法進行檢查。如果它是DBNull(我的意思是,編輯答案以反映它),它不能轉換爲Int32,因此您需要弄清楚如何處理它。 –

3

可以yield員工:

while (rdr.Read()) 
{ 
    Employee Emp = new Employee(); 
    Emp.Emp_Id = Convert.ToInt32(rdr["Emp_Id"]); 
    Emp.EmpName = rdr[("EmpName")].ToString(); 

    // Any other properties... 

    yield return Emp; // This is the new line 
} 
相關問題