这种情况下如何处理sql事务?我是一名C#程序员。我想弄清楚这个复杂的概念。如果有2个数据库:A和B。假设我想在两个数据库中插入记录,但先在A中,然后在B中。假设在插入数据库B时发生异常。情况是如果B崩溃,与数据库的事务A也应该回滚。我需要做什么?我知道我可以将SqlTransaction对象与SqlConnectionString类一起使用。我可以为此提供一些代码吗?这已经在这里被问到:Implementingtransactionsonmultipledatabases。keithwarren7的最佳答案:像这样使用TransactionScope类using(TransactionScopets=newTransactionScope()){//所有数据库代码都在这里//如果发生错误,则跳出using块,它将处理并回滚ts.Complete();如果需要,这个类会自动转换为分布式事务。.编辑:为原始答案添加解释你在MSDN中有一个很好的例子:http://msdn.microsoft.com/fr-fr/library/system.transactions.transactionscope%28v=vs.80%29.aspx。此示例说明如何在一个TransactionScope中使用2个数据库连接。//创建TransactionScope来执行命令,保证//这两个命令都可以作为单个工作单元提交或回滚。using(TransactionScopescope=newTransactionScope()){using(SqlConnectionconnection1=newSqlConnection(connectString1)){try{//打开连接会自动将其登记在//TransactionScope中作为轻量级事务。connection1.Open();//创建SqlCommand对象并执行第一个命令。SqlCommandcommand1=newSqlCommand(commandText1,connection1);returnValue=command1.ExecuteNonQuery();writer.WriteLine("命令1影响的行:{0}",returnValue);//如果你到达这里,这意味着command1成功了。通过将connection2的using块嵌套在connection1的using块中,您可以在connection2打开时//节省服务器和网络资源//仅当有机会提交事务时。使用(SqlConnectionconnection2=newSqlConnection(connectString2))try{//当connection2打开时,事务升级为完整的分布式//事务。connection2.Open();//在第二个数据库中执行第二个命令。返回值=0;SqlCommandcommand2=newSqlCommand(commandText2,connection2);returnValue=command2.ExecuteNonQuery();writer.WriteLine("要受command2影响的行:{0}",returnValue);}catch(Exceptionex){//显示command2失败的信息。writer.WriteLine("command2的返回值:{0}",returnValue);writer.WriteLine("异常消息2:{0}",ex.Message);}}catch(Exceptionex){//显示command1失败的信息。writer.WriteLine("command1的返回值:{0}",returnValue);writer.WriteLine("异常消息1:{0}",ex.Message);}}//Complete方法提交事务。如果抛出异常,//Complete不会被调用,事务会被回滚。范围.完成();}如果您只想拥有一个连接并且像管理这些东西,那你可以用一个链接服务器,调用服务器A的SP,服务器A可以调用服务器B的SP?以上就是C#学习教程:这种情况下如何处理sql事务?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
