本文轉載:http://www.cnblogs.com/litianfei/archive/2007/08/16/858866.html
UpdateCommand和DeleteCommand出現DBConcurrencyException異常。調試提示:違反並發性: DeleteCommand 影響了預期 1 條記錄中的 0 條;或 違反並發性: UpdateCommand影響了預期 1 條記錄中的 0 條。
這里的違反並發性:不是指多人編輯引起的並發。
問題原因:
在插入、更新或刪除操作過程中當受影響的行數等於零時由 DataAdapter 引發的異常。
可能的解決方法:
1 檢查是否設有主鍵。
2 DeleteCommand的問題:檢查是否含有自動編號字段(Access的自動編號字段可能會引發此異常);
UpdateCommand的問題:檢查更新的字段的原始值是否為空值(原始空值更新時可能會引發此異常)。
3、多人並行操作也可能引發這樣的異常。
----------------------
如果你采用了BindingSource和TableAdapter的話,請參考下面的代碼:
-----------------------------------------------------------------------------------
例程來源:人民郵電出版社出版的書《Visual Basic .NET 2005數據庫編程技術與實例》
詳情請見:http://www.ptpress.com.cn/books/Book_Information.asp?BID=16271
-----------------------------------------------------------------------------------
Me.Validate()
Me.職工基本信息BindingSource.EndEdit()
Me.職工基本信息TableAdapter.Update(Me.工資管理DataSet.職工基本信息.GetChanges)
Me.工資管理DataSet.職工基本信息.AcceptChanges()
但是這樣做后,導致了,dataset和數據庫不一致的問題。是.AcceptChanges()
語句導致。
----------------------
也反應這樣處理:http://software.it168.com/manual/ado.net/4-2-g.htm
? |
|
狀態 | 說明 |
---|---|
Continue | 繼續執行更新操作。 |
ErrorsOccurred | 中止更新操作並引發異常。 |
SkipCurrentRow | 忽略當前行並繼續執行更新操作。 |
SkipAllRemainingRows | 中止更新操作但不引發異常。 |
我們建議目前這樣處理:
if(this.工資管理DataSet.職工基本信息.GetChanges!=null)
{Me.職工基本信息TableAdapter.Update(Me.工資管理DataSet.職工基本信息.GetChanges)}
{
string conn = " Data Source=.;Initial Catalog=TestDB;Integrated Security = SSPI; ";
using (SqlConnection connection = new SqlConnection(conn))
{
connection.Open();
string select = " SELECT * FROM Table_1 ";
SqlDataAdapter da = new SqlDataAdapter( select, connection);
da.RowUpdating += new SqlRowUpdatingEventHandler(da_RowUpdating);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dataTable = ds.Tables[ 0];
dataTable.Rows[ 0][ 1] = " 9999 ";
// 刪除第8行
// dataTable.Rows[1].Delete();
SqlCommand cmd = new SqlCommand();
SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(da);
cmd=objCommandBuilder.GetDeleteCommand();
da.Update(dataTable);
// if (dataTable.GetChanges() != null)
// {
// da.Update(dataTable.GetChanges());
// }
// dataTable.AcceptChanges();
this.dataGridView1.DataSource = dataTable;
}
}
void da_RowUpdating( object sender, SqlRowUpdatingEventArgs e)
{
e.Status = UpdateStatus.Continue;
}