簡體   English   中英

C#使用存儲過程:我如何使用.FirstOrDefault()?

[英]C# using stored procedure : how can I use .FirstOrDefault()?

我寫了兩個函數,函數#1根據鍵從數據庫中獲取數據,函數#2調用第一個函數,如果存在數據,則刪除記錄。

但是當數據不可用時,它也會輸入if條件

public Employee GetEmployee(int Key)
{
      Employee employee = new Employee();

      if (con.State != System.Data.ConnectionState.Open)
      {
          con.Open();
      }

      SqlCommand cmd = new SqlCommand("Sp_GetById", con);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.AddWithValue("@EmpId", Key);

      SqlDataReader rdr = cmd.ExecuteReader();

      if (rdr.HasRows == true)
      {
          while (rdr.Read())
          {
              employee.Emp_Id = Convert.ToInt32(rdr["Emp_Id"]);
              employee.EmpName = rdr[("EmpName")].ToString();

              if (!Convert.IsDBNull(rdr[("Cnt_Id")]))
              {
                  employee.Cnt_Id = Convert.ToInt32(rdr["Cnt_Id"]);
              }

這里我在DeleteById(int key)調用GetEmployee() DeleteById(int key)

public void DeleteById(int Id)
{
     var x = GetEmployee(Id);

     if (x != null)
     {
     }
}

問題是當數據庫中不存在id時,代碼仍然進入If條件

在你得到功能你有這個:

Employee employee = new Employee();

我假設在函數的最后你有類似的東西

return employee;

這就是為什么x永遠不會為空。 你可以做一個

if(x.Id != null)

因為當db中沒有emplyee時,id永遠不會獲得值。

因為它在你的代碼中不會為null所以在GetEmployee里面執行以下操作:

public Employee GetEmployee(int Key)
{
      //Employee employee = new Employee();//this will make the condition always true
      Employee employee = null;//Replace it with this to start with null value
      if (con.State != System.Data.ConnectionState.Open)
      {
          con.Open();
      }

然后里面while這將是這樣的:

 while (rdr.Read())
 {
   employee = new Employee();//add this 
   employee.Emp_Id = Convert.ToInt32(rdr["Emp_Id"]);

如果沒有記錄,那么你需要從“GetEmployee()”方法返回null。為此你可以這樣做..

答案1)

      List<Employee> employee = new List<Employee>();
      SqlCommand cmd = new SqlCommand("Sp_GetById", con);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.AddWithValue("@EmpId", Key);

      SqlDataReader rdr = cmd.ExecuteReader();

      if (rdr.HasRows == true)
      {
        while (rdr.Read())
        {
        employee.Add(new Employee{
        Emp_Id = Convert.ToInt32(rdr["Emp_Id"]),
        EmpName = rdr[("EmpName")].ToString()
           });
        }
     }

而回來寫這個..

return employee.FirstOrDefault();

這里FirstOrDefault()方法將返回單個Employee對象,如果有數據則返回null ...

答案2)

  Employee employee = new Employee();
  SqlCommand cmd = new SqlCommand("Sp_GetById", con);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.AddWithValue("@EmpId", Key);

  SqlDataReader rdr = cmd.ExecuteReader();

  if (rdr.HasRows == true)
  {
    while (rdr.Read())
    {
       employee.Emp_Id = Convert.ToInt32(rdr["Emp_Id"]);
       employee.EmpName = rdr[("EmpName")].ToString();
    }
 }
 else
 {
   return null;
 }

return employee;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM