2017-10-18 1 views
-2

Aidez-moi - comment puis-je écrire du code pour obtenir des données en utilisant une procédure stockée?Comment écrire du code C# pour exécuter une procédure stockée dans classFile

Je reçois une erreur de ne pas tout le code retourne une valeur:

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

Qu'est-ce que u besoin ici –

+0

Ici im obtenir pas tout le code écrit vous –

+2

ne retournent rien – spodger

Répondre

4

Eh bien, votre code est presque correct. Vous avez besoin d'ajouter un peu plus à l'aide de déclarations et bien sûr, ont une valeur de retour:

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

Ici, le nombre d'employés est devenu zéro –

+0

Soo Sorry Ici vous avez mentionné Emp.Emp_Id = Convert.ToInt32 (rdr ["Emp_Id"]); // Et si c'est nul? Comment puis-je gérer –

+0

Vous pouvez le vérifier avec la méthode 'DataReader.IsDBNull'. Si c'est DBNull (ce que je voulais dire, édité la réponse pour la refléter), il ne peut pas être converti en Int32, vous devez donc savoir quoi faire avec. –

3

Vous pouvez yield l'employé:

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 
}