C# 事务是否必须位于SQL Server中的存储过程中?

C# 事务是否必须位于SQL Server中的存储过程中?,c#,.net,sql-server,sql-server-2008,C#,.net,Sql Server,Sql Server 2008,我有一堆更新和插入查询,我从我的C代码中调用这些查询,它们需要在事务中。我更喜欢将它们保存在C中,而不是使用存储过程。我使用SQLCommand.ExecuteOnQuery开始并提交事务。在我尝试提交事务之前,当我收到一条消息,表示提交事务请求没有相应的BEGIN事务时,它工作正常。我正在关闭两个呼叫之间的连接。这就是问题所在吗?不,他们没有 您可以直接在连接本身上控制C中的事务,或者使用System.Transactions命名空间使用环境事务,如果您希望事务跨越数据库连接甚至不同的数据库分

我有一堆更新和插入查询,我从我的C代码中调用这些查询,它们需要在事务中。我更喜欢将它们保存在C中,而不是使用存储过程。我使用SQLCommand.ExecuteOnQuery开始并提交事务。在我尝试提交事务之前,当我收到一条消息,表示提交事务请求没有相应的BEGIN事务时,它工作正常。我正在关闭两个呼叫之间的连接。这就是问题所在吗?

不,他们没有

您可以直接在连接本身上控制C中的事务,或者使用System.Transactions命名空间使用环境事务,如果您希望事务跨越数据库连接甚至不同的数据库分布式事务

如果要关闭调用之间的连接,请使用System.Transactions命名空间来控制事务。然后,事务将跨越多个连接

使用System.Transactions命名空间的一些基本代码:

using (TransactionScope scope = new TransactionScope())
{
     //Do operation 1 on connection 1 (open close connection)
     //Do operation 2 on connection 2 (open close connection)

     scope.Complete();
}
不,他们没有

您可以直接在连接本身上控制C中的事务,或者使用System.Transactions命名空间使用环境事务,如果您希望事务跨越数据库连接甚至不同的数据库分布式事务

如果要关闭调用之间的连接,请使用System.Transactions命名空间来控制事务。然后,事务将跨越多个连接

使用System.Transactions命名空间的一些基本代码:

using (TransactionScope scope = new TransactionScope())
{
     //Do operation 1 on connection 1 (open close connection)
     //Do operation 2 on connection 2 (open close connection)

     scope.Complete();
}

这是一个很好的答案,但我想补充几点。首先,当您使用TransactionScope时,您涉及到MSDTC,因此如果它决定将事务升级为分布式事务,您需要确保MSDTC已配置,并且防火墙端口已为其打开。第二,这更多的是对初始问题的参考,而不是你的答案,即当你在C中打开/关闭连接时,它通常不会与单独的sql连接/SPID映射1:1,因为驱动程序将共享连接。关于MSDTC,这一点非常好。交易非常容易使用,直到您的交易升级到MSDTC。我们有两个数据库,一个OLTP和一个audit。对于审计,我使用RequiresNew来避免升级。我们真的不在乎审计是否失败,而不是银行应用程序,因此这避免了升级和MSDTC配置的麻烦。哇,这比我想要的要好。优雅率直。谢谢这是一个很好的答案,但我想补充几点。首先,当您使用TransactionScope时,您涉及到MSDTC,因此如果它决定将事务升级为分布式事务,您需要确保MSDTC已配置,并且防火墙端口已为其打开。第二,这更多的是对初始问题的参考,而不是你的答案,即当你在C中打开/关闭连接时,它通常不会与单独的sql连接/SPID映射1:1,因为驱动程序将共享连接。关于MSDTC,这一点非常好。交易非常容易使用,直到您的交易升级到MSDTC。我们有两个数据库,一个OLTP和一个audit。对于审计,我使用RequiresNew来避免升级。我们真的不在乎审计是否失败,而不是银行应用程序,因此这避免了升级和MSDTC配置的麻烦。哇,这比我想要的要好。优雅率直。谢谢