.net 当SqlConnection保持打开时,它会更新吗?

.net 当SqlConnection保持打开时,它会更新吗?,.net,sql-server,sqlconnection,.net,Sql Server,Sqlconnection,在我的ASP.NET项目中,我在必要时创建/打开SqlConnection,并在应用程序请求时关闭它 尽管如此,我只是想知道如果在打开一个连接(比如连接a)时,从另一个请求(比如连接B)更新数据库,会发生什么情况 所以是这样的 (假设最初x是1) A.打开() B.打开() B.UpdateX()-->SET x=2 B.关闭() A.选择X()-->这会返回1还是2? A.Close()SQL连接永远不会更新-它只是到服务器的管道。这是说当你把车移到别的地方时,它会更新 连接所在会话的事务服务

在我的ASP.NET项目中,我在必要时创建/打开SqlConnection,并在应用程序请求时关闭它

尽管如此,我只是想知道如果在打开一个连接(比如连接a)时,从另一个请求(比如连接B)更新数据库,会发生什么情况

所以是这样的

(假设最初x是1)

A.打开()
B.打开()
B.UpdateX()-->SET x=2
B.关闭()
A.选择X()-->这会返回1还是2?

A.Close()

SQL连接永远不会更新-它只是到服务器的管道。这是说当你把车移到别的地方时,它会更新

连接所在会话的事务服务器端(注意:同一事务可以有多个连接-尽管我相信大多数人不知道这一点)(隐式或显式)根据配置的隔离级别显示数据。有时你想要音调,有时是另一种。坐下来设计


现在,保持连接打开的一个问题是,它不能在页面之间正确重置,这可能会导致各种愚蠢的问题。差不多是安帕坦。我们最近在与Oracle的一个项目中遇到了一个问题,服务器在没有数据请求的情况下2小时后断开了客户端的连接。-。。。在发送下一个sql之前,连接没有“关闭”(或显示关闭)。导致您不希望出现的有趣错误-使用连接池来抵消性能开销。

SQL连接永远不会更新-它只不过是到服务器的管道。这是说当你把车移到别的地方时,它会更新

连接所在会话的事务服务器端(注意:同一事务可以有多个连接-尽管我相信大多数人不知道这一点)(隐式或显式)根据配置的隔离级别显示数据。有时你想要音调,有时是另一种。坐下来设计


现在,保持连接打开的一个问题是,它不能在页面之间正确重置,这可能会导致各种愚蠢的问题。差不多是安帕坦。我们最近在与Oracle的一个项目中遇到了一个问题,服务器在没有数据请求的情况下2小时后断开了客户端的连接。-。。。在发送下一个sql之前,连接没有“关闭”(或显示关闭)。导致您不希望出现的有趣错误-使用连接池来抵消性能开销。

返回的数据取决于运行查询时数据库的状态,而不是打开连接时数据库的状态

假设您的代码中没有使用任何特定的事务管理,并且假设update语句是一个不同的行或表更新。在这种情况下,连接a将看到X=2。这是因为两个连接都将使用默认事务级别,该级别为两个连接的read-committed

现在,在您的示例中,如果是单行上的单值更新,则无法将连接设为read X=1。但是,如果您在连接B上使用事务,并且没有提交并保持连接打开。连接A的查询将被阻止,直到其超时过期。基本上,在完成B之前,X是不可访问的

另外,如果您正在更新连接B的一个事务中的1000万行,而连接A位于不同的线程和事务中。连接a可以使用事务隔离级别“read uncommitted”读取一些旧的/过时的/无效的数据


希望这有帮助

返回的数据取决于数据库在运行查询时的状态,而不是在打开连接时的状态

假设您的代码中没有使用任何特定的事务管理,并且假设update语句是一个不同的行或表更新。在这种情况下,连接a将看到X=2。这是因为两个连接都将使用默认事务级别,该级别为两个连接的read-committed

现在,在您的示例中,如果是单行上的单值更新,则无法将连接设为read X=1。但是,如果您在连接B上使用事务,并且没有提交并保持连接打开。连接A的查询将被阻止,直到其超时过期。基本上,在完成B之前,X是不可访问的

另外,如果您正在更新连接B的一个事务中的1000万行,而连接A位于不同的线程和事务中。连接a可以使用事务隔离级别“read uncommitted”读取一些旧的/过时的/无效的数据

希望这有帮助