c# - 判断 SqlTransaction 是写入数据还是只读

标签 c# sql-server ado.net

我要开始说我很确定这是不可能的。谷歌搜索没有发现任何人问这个问题,所以我悲观地希望。

我正在使用 SqlTransaction 连接到数据库,并在我关闭它之前允许多个消费者使用该事务。是否可以确定事务是否仅用于读取数据或读取/写入数据,即使可能已使用存储过程?是否存在可以检查这一点的某些属性或 SQL 方法(除了执行一些邪恶的差异)?

最佳答案

sys.dm_exec_sessions有一列 writes。你可以这样查询:

SELECT writes FROM sys.dm_exec_sessions WHERE session_id = @@SPID

不过,这会增加一些开销。我认为 DMV 在运行的 session 数上是 O(N)。 session 越多,系统的速度就会越慢。最终它变成了负缩放的情况。

请注意,这是每个 session 的值。如果每个 session 有多个事务(每次打开 SqlConnection 对象),将累积跟踪写入。您需要考虑到这一点,或者在其他答案中使用这个想法。

关于c# - 判断 SqlTransaction 是写入数据还是只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22488381/

相关文章:

c# - 控制方法返回的最佳模式

c# - 发送大量数据时“连接被远程主机强行关闭”

SQL 服务器 : Can a query return results to multi-part searches in one step?

c# - 将 SQL 查询转换为 LINQ -- 运算符 '&&' 不能应用于类型 'int' 和 'bool' 的操作数

c# - 使用 ADO 3.5 将数据从 Excel 导入 64 位应用程序

c# - 跨多个数据库的交叉引用

c# - 设置十进制标识符的小数位数和精度

c# - WPF ICommand "Event Binding"- 获取 EventArgs

sql - LEFT JOIN 根据 WHERE 条件的位置给出不同的数据集

ado.net - Db命令和参数: Get the actual executed SQL (Parameter values filled in)