C#中的事务? C#中的事务,首先用一个数据库连接对象处理一个操作,然后还有别的数据库操作 ,我又从新new了一个数据库连接对象进行操作,是不是这样子就不行阿.?我用三层做,数据库连接对象都封装在一个类里了,每次增删改操作都是从新得到连接对象,.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你使用了TransactionScope的话,即使你的sql访问代码里没有明确使用事务就是SqlTransaction对象,它也会启动事务,你的每一个数据处理都会有事务。 搂主需要单独把Begin事务,和Commit事务,以及Rollback事务三个操作,也做成一个可调用的接口 再扩展一点建议,呵呵如果搂主在封装数据库访问操作的类里面使用了DataReader并且输出的话,还需要把CloseConnection也给做成一个可调用的接口,因为读取DataReader内容的时候,连接必须是打开的读完了才能关闭。 如果是多连接的话,就用分布式事务,using(System.Transaction.TrasactionScrop ts=new System.Transaction.TrasactionScrop()){//第一个类去增加到表A//第二个类增加数据到表C//第三个去干别的去ts.Complete();}; 应用程序通过在 SqlConnection 对象上调用 BeginTransaction 来创建 SqlTransaction 对象。对 SqlTransaction 对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。注意 在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。 下面的示例创建一个 SqlConnection 和一个 SqlTransaction。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。出现任何错误时事务都会回滚。Try/Catch 错误处理用于处理尝试提交或回滚事务时的所有错误。private static void ExecuteSqlTransaction(string connectionString){ using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = connection.CreateCommand(); SqlTransaction transaction; //开始事务. transaction = connection.BeginTransaction("SampleTransaction"); //设置command对象的Transaction属性来使用事务 command.Connection = connection; command.Transaction = transaction; try { command.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"; command.ExecuteNonQuery(); command.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"; command.ExecuteNonQuery(); //提交事务 transaction.Commit(); Console.WriteLine("Both records are written to database."); } catch (Exception ex) { Console.WriteLine("Commit Exception Type: {0}", ex.GetType()); Console.WriteLine(" Message: {0}", ex.Message); //发生异常就回滚事务. try { transaction.Rollback(); } catch (Exception ex2) { // This catch block will handle any errors that may have occurred // on the server that would cause the rollback to fail, such as // a closed connection. Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType()); Console.WriteLine(" Message: {0}", ex2.Message); } } }} winForm上传文件指定文件到远程服务器 WinForm里如何给文本框添加软键盘 如何实现XtraTreeList与GridControl控件的交互 求高手解释一下程序流程 窗口问题! C#里面如何将.txt文件中的数据读入, winform中,如何在DataGrid中绑定下拉列? 想要为Visual Studio.Net 写插件 哪里有相关的文档吗 急!!!asp.net + c# 怎么实现产品的无限级分类????????????????????????? 关于button超高难度问题 何如让html代码整齐排列? 怎么样在窗体加载的时候展开TreeView全部节点?
读完了才能关闭。
using(System.Transaction.TrasactionScrop ts=new System.Transaction.TrasactionScrop())
{
//第一个类去增加到表A//第二个类增加数据到表C//第三个去干别的去ts.Complete();};
在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open(); SqlCommand command = connection.CreateCommand();
SqlTransaction transaction; //开始事务.
transaction = connection.BeginTransaction("SampleTransaction"); //设置command对象的Transaction属性来使用事务
command.Connection = connection;
command.Transaction = transaction; try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery(); //提交事务 transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message); //发生异常就回滚事务.
try
{
transaction.Rollback();
}
catch (Exception ex2)
{
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}
}