[英]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.