ADO.Net存储过程transaction的使用事项
来源:互联网 发布:prezi for mac 中文版 编辑:程序博客网 时间:2024/05/15 03:58
public bool InsertInvitation(DataTable dt) { SqlTransaction transaction = null; try { using (SqlConnection conn = new SqlConnection(sqlHelper.SQLConString)) { conn.Open(); transaction = conn.BeginTransaction(); SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction); //服务器上目标表的名称 sbc.DestinationTableName = dt.TableName; sbc.BatchSize = dt.Rows.Count; sbc.BulkCopyTimeout = 180; sbc.WriteToServer(dt); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.Connection = conn; cmd.Transaction = transaction; cmd.CommandText = "insert AABB(ID)values(1)"; cmd.ExecuteNonQuery(); Convert.ToInt32("sdfs"); transaction.Rollback(); } } catch (Exception ex) { transaction.Rollback(); LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString()); return false; } return true; }
当报异常的时候,transaction会引发“此 SqlTransaction 已完成;它再也无法使用。”
改成下面的样子则无碍。另外,使用事务的时候,要注意将SqlTransaction赋给执行命令的SqlTransaction,如
SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction);、cmd.Transaction = transaction;
public bool InsertInvitation(DataTable dt) { using (SqlConnection conn = new SqlConnection(sqlHelper.SQLConString)) { SqlTransaction transaction = null; try { conn.Open(); transaction = conn.BeginTransaction(); SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction); //服务器上目标表的名称 sbc.DestinationTableName = dt.TableName; sbc.BatchSize = dt.Rows.Count; sbc.BulkCopyTimeout = 180; sbc.WriteToServer(dt); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.Connection = conn; cmd.Transaction = transaction; cmd.CommandText = "insert AABB(ID)values(1)"; object i=cmd.ExecuteNonQuery(); if(Convert.toInt32(i)<=0){ transaction.Rollback(); } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString()); return false; } } return true; }
0 0
- ADO.Net存储过程transaction的使用事项
- ADO.NET实体数据框架中存储过程的使用
- ADO.NET使用存储过程访问数据库
- 在 ADO.NET中使用存储过程
- 使用存储过程修改数据 (ADO.NET)
- ADO & ADO.NET中使用存储过程的两个共用的函数
- HOW TO:使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- HOW TO:使用 ADO.NET 和 Visual C++ .NET 调用带参数的存储过程
- ADO.NET操作存储过程
- ADO.NET调用存储过程
- 存储过程和ado.net
- ADO.Net---存储过程---ShinePans
- ADO.NET调用存储过程
- ADO.NET执行存储过程
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- React Native (五):上下拉刷新加载
- 网络传输压缩DLL: ICSharpCode.SharpZipLib
- MySQL事务实现方法 、数据库索引
- 我的lamda表达式的注意事项
- linux下高并发服务器实现
- ADO.Net存储过程transaction的使用事项
- 我的注意细节
- scrapy 爬虫入门(1)
- 引用类型和值类型
- iOS Runtime (二)
- Bootstrap的学习笔记
- Android游戏开发之SurfaceView与游戏开发
- 关于数据并发
- MySQL的事务实现方法