淺談LINQ如何插入刪除和更新數據庫記錄備注
一、引言
使用LINQ TO SQL生成數據庫訪問層極大地簡化了此前數據庫訪問層的設計(以前基于SQL SERVER的開發大多是基于SQLHELPER或微軟企業級的DAAB吧?)。
但是,LINQ TO SQL不是***的。例如,你在重新修改或設計數據庫表格后,原先使用LINQ TO SQL生成的DATACONTEXT類并不會自動更新。因此,針對這些更改之后的操作,需要特別注意。
二、問題描述
[一]
本文中首先記錄的是使用LINQ插入數據庫記錄時涉及的一個基本概念級問題。
請看下面的代碼片斷:
public bool InsertUserStatus(string UserName)
{
eMailDataContext dt = new eMailDataContext();
try
{
//刪除可能存在的原有用戶狀態信息
Table3 u = dt.Table3.First(m => m.abc == UserName);
//if (dt.Table3.Count() != 0)
//{
// Table3 u = dt.Table3.First(m => m.abc == UserName);
//if (u != null)
//{
dt.Table3.DeleteOnSubmit(u);
dt.SubmitChanges();
//}
//}
//創建新的用戶狀態信息
Table3 userstatus = new Table3
{
abc = UserName
};
//插入到數據庫表格UserStatus中
dt.Table3.InsertOnSubmit(userstatus);dt.SubmitChanges();
return true;
}
catch (System.InvalidOperationException)
{
return false;//(2)
}
}
上述代碼的意思是,在表格Table3 中先刪除可能存在的符合條件的記錄,然后在此表格中再插入一條記錄數據。上面的代碼將“可能”引發異常,將流程控制轉向(2)處。
這些“可能”在于,數據表格Table3 中最初無記錄,則必引發異常;如果有記錄,則一切符合既定操作要求。
于是,修改上面的代碼為如下:
public bool InsertUserStatus(string UserName)
{
eMailDataContext dt = new eMailDataContext();
try
{
//刪除可能存在的原有用戶狀態信息
if (dt.Table3.Count() != 0)// (1)
{
Table3 u = dt.Table3.First(m => m.abc == UserName);
if (u != null)
{
dt.Table3.DeleteOnSubmit(u);
dt.SubmitChanges();
}
}
//創建新的用戶狀態信息
Table3 userstatus = new Table3
{
abc = UserName
};
//插入到數據庫表格UserStatus中
dt.Table3.InsertOnSubmit(userstatus);
dt.SubmitChanges();return true;
}
catch (System.InvalidOperationException)
{
return false;
}
}
也就是說,刪除操作前需要先判定數據表格是否記空--這可以通過紅色的if語句((1)處)來實現。
如此以來,無論表格中是否事先存在記錄都可以往下執行可能的刪除及插入操作了。
[二]
再來看一個例子,例如:
//刪除舊的郵件 where UserName=" + "'"+UserName +"'"+ " and Host=" + "'"+host+"'"; |
上述操作同樣拋出異常。因此,需要同上面提到的那樣,先進行數據庫表格記錄數據判斷,再進行可能的刪除操作。因此,再修改上面代碼,如下所示:
//刪除舊的郵件 where UserName=" + "'"+UserName +"'"+ " and Host=" + "'"+host+"'"; |
這樣便OK了。
【編輯推薦】