Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何查看SQL事务上挂起的更改?_.net_Vb.net_Tsql - Fatal编程技术网

.net 如何查看SQL事务上挂起的更改?

.net 如何查看SQL事务上挂起的更改?,.net,vb.net,tsql,.net,Vb.net,Tsql,在处理一些更新数据库的函数时,我编写了一些快速测试,以确保函数正确执行。在实际更新数据库时,我可以将事务传递给函数,然后提交: user.Assignment("assignment value for some column in table", connection, transaction) transaction.Commit() 我很好奇是否有一种方法可以编写一个快速测试来验证事务在提交之前是否会实际更新某些行 (伪码) 您可以使用SSMS中的和(nolock)来检查这些值。如果您想

在处理一些更新数据库的函数时,我编写了一些快速测试,以确保函数正确执行。在实际更新数据库时,我可以将事务传递给函数,然后提交:

user.Assignment("assignment value for some column in table", connection, transaction)
transaction.Commit()
我很好奇是否有一种方法可以编写一个快速测试来验证事务在提交之前是否会实际更新某些行

(伪码)


您可以使用SSMS中的
和(nolock)
来检查这些值。如果您想从.NET查看此内容,我相信您可以更改隔离级别并重新查询。

您可以使用SSMS中的
和(nolock)
来检查这些值。如果您想从.NET查看此内容,我相信您可以更改隔离级别并重新查询。

只要您在连接中,就可以像正常情况一样查询数据;其他呼叫者将被阻止,但您可以完全访问修改后的数据

如果您使用的是
TransactionScope
,这意味着您可以使用任何命令/连接(到同一数据库),只要该连接是在
TransactionScope
中创建的,它将自动登记到该事务中(尽管使用相同的连接实例更有效-避免跳转到DTC的任何风险)


如果您使用的是
DbTransaction
,则必须使用相同的连接实例,并记住在针对连接执行的任何命令上适当设置
.Transaction

只要您在连接内部,您就可以像平常一样查询数据;其他调用者将被阻止,但您将拥有对修改数据的完全访问权限

如果您使用的是
TransactionScope
,这意味着您可以使用任何命令/连接(到同一数据库),只要该连接是在
TransactionScope
中创建的,它将自动登记到该事务中(尽管使用相同的连接实例更有效-避免跳转到DTC的任何风险)


如果您使用的是
DbTransaction
,则必须使用相同的连接实例,并记住在针对该连接执行的任何命令上适当设置
.Transaction

因此,如果我更新与该事务相关的某些列,这些值将在提交之前反映在表中?我不确定在这种情况下,您可能还需要打开MARS或使用另一个线程从client@afuzzyllama这就是使用事务的全部原因。您正在将其写入未提交的数据库。您可以通过更改隔离级别来读取未提交的事务-这就是NOLOCK所做的。因此,如果我更新与事务相关的一些列saction,这些值将在提交之前反映在表中?我不确定这一点,但您可能还需要打开MARS或使用另一个线程从client@afuzzyllama这就是使用事务的全部原因。您正在未提交地将其写入数据库。您可以通过更改isolatio来读取未提交的事务n级-这是NOLOCK所做的。保持事务简短/快速,在进行修改时/之前进行检查,而不是在修改之后,如果确实需要,使用输出返回任何更改。我已经完成了所有这些。这实际上不是一个在实践中做什么的问题,但如果可能的话,更是一个问题。“输出”是什么?如果您仍在交易中,您应该可以查询它…?@MarcGravel-在与我的高级DBA交谈后,您完全正确,但我无法选择评论作为正确答案:(我的假设是,您希望从另一个应用程序/连接中查看。保持事务简短/快速,在进行修改时/之前进行检查,而不是在修改之后,如果确实需要,则使用输出返回任何更改。我已经完成了所有这些操作。这实际上不是一个如何操作的问题,但如果是pos,则更是如此。)一点也不可能。什么是“输出”?如果您仍在事务中,您应该可以查询它…?@MarcGravel-在与我的高级DBA交谈后,您完全正确,但我无法选择一条注释作为正确答案:(我的假设是您希望从另一个应用程序/连接查看。
user.Assignment("assignment value for some column in table", connection, transaction)
If Not transaction["SomeColumn"] = "Expected value for SomeColumn"
    assert("ColumnName was not going to be updated to the expected value!")
transaction.Rollback()