使用DbHelperSQL帮助类,怎么实现数据库事务

bacely 2008-10-16 07:58:19
我以前一直是先写一个父类,再写一个子类,然后再写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类,其中的方法是向数据库的保存\更新\删除方法,没有使用到事务...

可在进行多表操作记录时,就需要事务了,,,如果使用帮助类是远远够的,不知道怎么改....请大家帮助啊!!!!!!
...全文
482 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bacely 2008-10-16
  • 打赏
  • 举报
回复
呵呵...其实我的要求很简单...哈哈...

估计我想我已经自己解决了..



private void Submit()
{
// 声明定义事务
using (TransactionScope ts = new TransactionScope())
{
try
{
// 事务方法体
Sub1();
Sub2();

// 提交事务并回滚
ts.Complete();
}
catch
{ }
}

this.GvBind();
}

private static void Sub2()
{
DbHelperSQL.ExecuteSql("INSERT INTO Items(Item) VALUES(''aa'')");
}

private static void Sub1()
{
DbHelperSQL.ExecuteSql("INSERT INTO Items(Item) VALUES(101)");
}



麻烦的是要开启Distributed Transaction Coordinator服务

不开启MSDTC可就玩不转了...唉...用到分布式了....这玩艺也整得太大了....不是一个轻量级的东西 ,用起来总是觉得别扭....
dupoutVIP 2008-10-16
  • 打赏
  • 举报
回复
       /// <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);
}
}
}
}
bacely 2008-10-16
  • 打赏
  • 举报
回复
看到一个好东东.....


TransactionScope

也许他能帮到我..嘿嘿.....测试中..
bacely 2008-10-16
  • 打赏
  • 举报
回复
哦.....因为我使用了动软的代码生成器生成了DAL层\BLL层\MODES层,所以,底层代码很简单.....使我都不知道怎么改了...呵呵...

救命啊...
已经博主授权,源码转载自 https://pan.quark.cn/s/053f1da40351 在计算机科学领域,MIPS(Microprocessor without Interlocked Pipeline Stages)被视作一种精简指令集计算机(RISC)的架构,其应用广泛存在于教学实践和嵌入式系统设计中。 本篇内容将深入阐释MIPS汇编语言中涉及数组处理的核心概念与实用操作技巧。 数组作为一种常见的数据结构,在编程中能够以有序化的形式储存及访问具有相同型的数据元素集合。 在MIPS汇编语言环境下,数组通常借助内存地址与索引进行操作。 以下列举了运用MIPS汇编处理数组的关键要素:1. **数据存储**: - MIPS汇编架构采用32位地址系统,从而能够访问高达4GB的内存容量。 - 数组元素一般以连续方式存放在内存之中,且每个元素占据固定大小的字节空间。 例如,针对32位的整型数组,其每个元素将占用4字节的存储空间。 - 数组首元素的地址被称为基地址,而数组任一元素的地址可通过基地址加上元素索引乘以元素尺寸的方式计算得出。 2. **寄存器运用**: - MIPS汇编系统配备了32个通用寄存器,包括$zero, $t0, $s0等。 其中,$zero寄存器通常用于表示恒定的零值,$t0-$t9寄存器用于暂存临时数据,而$s0-$s7寄存器则用于保存子程序的静态变量或参数。 - 在数组处理过程中,基地址常被保存在$s0或$s1寄存器内,索引则存储在$t0或$t1寄存器中,运算结果通常保存在$v0或$v1寄存器。 3. **数组操作指令**: - **Load/Store指令**:这些指令用于在内存与寄存器之间进行数据传输,例如`lw`指令用于加载32位数据至寄存器,`sw`指令...
根据原作 https://pan.quark.cn/s/cb681ec34bd2 的源码改编 基于Python编程语言完成的飞机大战项目,作为一项期末学习任务,主要呈现了游戏开发的基本概念和技术方法。 该项目整体构成约500行代码,涵盖了游戏的核心运作机制、图形用户界面以及用户互动等关键构成部分。 该项目配套提供了完整的源代码文件、相关技术文档、项目介绍演示文稿以及运行效果展示视频,为学习者构建了一个实用的参考范例,有助于加深对Python在游戏开发领域实际应用的认识。 我们进一步研究Python编程技术在游戏开发中的具体运用。 Python作为一门高级编程语言,因其语法结构清晰易懂和拥有丰富的库函数支持,在开发者群体中获得了广泛的认可和使用。 在游戏开发过程中,Python经常与Pygame库协同工作,Pygame是Python语言下的一款开源工具包,它提供了构建2D游戏所需的基础功能模块,包括窗口系统管理、事件响应机制、图形渲染处理、音频播放控制等。 在"飞机大战"这一具体游戏实例中,开发者可能运用了以下核心知识点:1. **Pygame基础操作**:掌握如何初始化Pygame环境,设定窗口显示尺寸,加载图像和音频资源,以及如何启动和结束游戏的主循环流程。 2. **面向对象编程**:游戏中的飞机、子弹、敌人等游戏元素通常通过的设计来实现,利用实例化机制来生成具体的游戏对象。 每个都定义了自身的属性(例如位置坐标、移动速度、生命值状态)和方法(比如移动行为、碰撞响应、状态更新)。 3. **事件响应机制**:Pygame能够捕获键盘输入和鼠标操作事件,使得玩家可以通过按键指令来控制飞机的移动和射击行为。 游戏会根据这些事件的发生来实时更新游戏场景状态。 4. **图形显示与刷新**:...

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧