【发布时间】:2011-09-11 20:12:27
【问题描述】:
由于我有一个带有DataSet QueryDB(string spName, DBInputParams inputParams) 方法的“DB util”类,我将其用于对数据库的所有调用,因此我想重用此方法以支持事务调用。
所以,最后我将在 SqlTransaction 中有一个 SqlDataAdapter.Fill。这会是一个坏习惯吗?因为我很少在事务中看到 DataAdapter.Fill 的用法,更常见的是 ExecuteReader()。有什么问题吗?
Edit1:问题是我的事务中经常需要检索一些数据(例如自动 ID)...这就是为什么我想将它作为 DataSet 获取。
Edit2: 奇怪的是,当我在来自 2 个不同进程的 for 循环 (10000) 中使用这种方法时,我得到“事务(进程 ID 55)与另一个进程在锁定资源上死锁并且有被选为死锁受害者。重新运行事务。” .这是正确的行为吗?
Edit3:(Edit2 的答案)我使用的是IDENT_CURRENT('XTable'),这是错误的来源。回SCOPE_IDENTITY()后,一切都解决了。
【问题讨论】:
-
提供您的编码,然后有可能解决您的问题。
标签: c# sql-server ado.net transactions dataadapter