违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。

东海凌波 2013-10-12 11:27:28
紧急求助:使用VB.NET2008 SP1+SQL SERVER2008 R2开发,在更新DATASET时使用以下方法:
Public Overloads Function UpdateDataSet(ByVal conn As DbConnection, ByVal ds As DataSet, ByVal tbName As String) As Integer
Dim dbCommand As DbCommand = Nothing
Dim iResult As Integer = 0
Try
Dim DbDataAdapter As DbDataAdapter = dbfactory.CreateDataAdapter()
dbCommand = conn.CreateCommand
dbCommand.CommandText = "SELECT * FROM " & tbName
dbCommand.CommandType = CommandType.Text
DbDataAdapter.SelectCommand = dbCommand
Dim cmdBuilder As DbCommandBuilder = dbfactory.CreateCommandBuilder()
cmdBuilder.DataAdapter = DbDataAdapter
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
'处理并发情况(分布式情况)
SyncLock GetType(DBHelper)
iResult = DbDataAdapter.Update(ds, tbName)
End SyncLock
Return iResult
Catch ex As Exception
log.Error(ex)
Throw ex
End Try
End Function
程式执行到 iResult = DbDataAdapter.Update(ds, tbName)报错,提示:违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。
在整表更新DATASET时,DATASET里面只有一个TABLE,且TABLE名和数据库中表名完全一致,数据列名和列数和数据库中也一致,这个问题要怎么处理,请各位指教,谢谢。
...全文
485 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckp00001 2013-11-10
  • 打赏
  • 举报
回复
要注意的是从服务器资源管理器中拖进的表,表中的信息要全,例如必须要有主键,否则TableAdapter中的updatecommd等就不好用,在数据集设计器页面中,XXXTableAdapter属性中,Update Command的Text中为空。例如:XXXTableAdapter..update将不可用。
可以用编程方法使用该Table Adapter:
Public Class Form1
Dim myAdapter As New DataSet1TableAdapters.table2TableAdapter
Dim myDataSet As New DataSet1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myAdapter.Fill(myDataSet.table2)
DataGridView1.DataSource = myDataSet.table2

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Me.Validate()
myAdapter.Update(myDataSet.table2)
MsgBox("Update Successful!")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

也可从数据源中拖到Form设计页面中的控件的方法,来使用TableAdapter。
==========================================
数据库表中的字段默认为0时,用自动生成的 Me.TableAdapterManager.UpdateAll(Me.天诺油库DataSet1) ,更新
时没有填的字段,默认为0时没有为0,在程序设计时要如下图将DefaultValue 设为0 :
lele_nancy 2013-11-01
  • 打赏
  • 举报
回复
DbDataAdapter用到的ds和不是从DB中读到的吧 ds和DbDataAdapter尽量保持一致
0o小石头o0 2013-10-12
  • 打赏
  • 举报
回复
1 检查是否设有主键。 2 检查更新的字段的原始值是否为空值(原始空值更新时可能会引发此异常)。 3、多人并行操作也可能引发这样的异常。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧