使用DbHelperSQL帮助类,如何实现数据库事务
使用DbHelperSQL帮助类,怎么实现数据库事务
我以前一直是先写一个父类,再写一个子类,然后再写DAL层....DAL层的每一个类都继承那个子类,,这样,可以实现数据库事务
可现在我看大家都在用SQL帮助类,看了看帮助类,确实挺好用.....
帮助类里有两个实现了数据库事务的方法:分别是
public static int ExecuteSqlTran(List<String> SQLStringList)
public static void ExecuteSqlTran(Hashtable SQLStringList)
两个方法....但是我在做东西的时候发现不能够这么做....
比如:我要插入多条记录到一个表,而这个表中的主键正好是另外一个表的外健,这时,当插入一条记录的时候,需要插入另外多条记录到另外一个表....晕...怕看不懂,举列说明吧:
需要插入的数据记录:
表一:
PID fied1 fied2 fied3
1 0 1 1
2 0 2 1
3 0 2 2
4 0 3 1
表二:
SID PID fied1
1 1 a
2 1 b
3 1 c
4 2 a
5 2 b
6 3 a
7 4 a
先举两个表的吧.....
我想这两个表必须同时更新才能算是成功的,否则任何一条记录的插入或更新错误,则数据库须回滚事务.
首先,须要将表一的第一条记录取出(声明:保存之前是不知道PID的),然后向数据库提交保存,获得PID值.这一步帮助类能够做到,可就是没有事务...
然后根据PID值,再将表二中的相关记录取出,更新PID值,再将符合条件的记录保存到数据库.....
这是需求,不知道哪位知道怎么整....
另外:在DAL层,每个表都有一个DAL类,其中的方法是向数据库的保存\更新\删除方法,没有使用到事务...
可在进行多表操作记录时,就需要事务了,,,如果使用帮助类是远远够的,不知道怎么改....请大家帮助啊!!!!!!
------解决方案--------------------
我以前一直是先写一个父类,再写一个子类,然后再写DAL层....DAL层的每一个类都继承那个子类,,这样,可以实现数据库事务
可现在我看大家都在用SQL帮助类,看了看帮助类,确实挺好用.....
帮助类里有两个实现了数据库事务的方法:分别是
public static int ExecuteSqlTran(List<String> SQLStringList)
public static void ExecuteSqlTran(Hashtable SQLStringList)
两个方法....但是我在做东西的时候发现不能够这么做....
比如:我要插入多条记录到一个表,而这个表中的主键正好是另外一个表的外健,这时,当插入一条记录的时候,需要插入另外多条记录到另外一个表....晕...怕看不懂,举列说明吧:
需要插入的数据记录:
表一:
PID fied1 fied2 fied3
1 0 1 1
2 0 2 1
3 0 2 2
4 0 3 1
表二:
SID PID fied1
1 1 a
2 1 b
3 1 c
4 2 a
5 2 b
6 3 a
7 4 a
先举两个表的吧.....
我想这两个表必须同时更新才能算是成功的,否则任何一条记录的插入或更新错误,则数据库须回滚事务.
首先,须要将表一的第一条记录取出(声明:保存之前是不知道PID的),然后向数据库提交保存,获得PID值.这一步帮助类能够做到,可就是没有事务...
然后根据PID值,再将表二中的相关记录取出,更新PID值,再将符合条件的记录保存到数据库.....
这是需求,不知道哪位知道怎么整....
另外:在DAL层,每个表都有一个DAL类,其中的方法是向数据库的保存\更新\删除方法,没有使用到事务...
可在进行多表操作记录时,就需要事务了,,,如果使用帮助类是远远够的,不知道怎么改....请大家帮助啊!!!!!!
------解决方案--------------------
- C# code
/// <summary> /// 执行查询 /// </summary> /// <param name="Querys">T-SQL语句的List泛型集合 T是string </param> /// <returns>返回影响行数</returns> public static int ExecuteNonQuery(List<string> Querys) { using (SqlConnection con = new SqlConnection(connectionString)) { using (SqlCommand com = new SqlCommand()) { com.Connection = con; con.Open(); SqlTransaction sqlTran = con.BeginTransaction(); try { com.Transaction = sqlTran; int row = 0; ; foreach (string str in Querys) { if (str.Length > 1) { com.CommandText = str; row += com.ExecuteNonQuery(); } } sqlTran.Commit(); con.Close(); com.Clone(); con.Dispose(); com.Dispose(); return row; } catch (SqlException e) { sqlTran.Rollback(); throw new Exception(e.Message); } } } }