如何在.NET中实现事务(1)

如何在.NET中实现事务机制呢? 通常可以使用2种方式: 直接写入到sql 中;使用ADO.NET 实现。下面依次作一下介绍:

方法1:直接写入到sql 中

使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现:

例如

BEGIN TRANS

DECLARE @orderDetailsError int, @productError int

DELETE FROM "Order Details" WHERE ProductID=42

SELECT @orderDetailsError = @@ERROR

DELETE FROM Products WHERE ProductID=42

SELECT @productError = @@ERROR

IF @orderDetailsError = 0 AND @productError = 0

COMMIT TRANS

ELSE

ROLLBACK TRANS

这种方法比较简单,具体可以查阅相关sql server 帮助

方法2 :使用ADO.NET 实现,使用这种方式的优点是可以在中间层来管理事务,当然你也可以选择在数据层来实现。

SqlConnection 和OleDbConnection 对象有一个 BeginTransaction 方法,它可以返回 SqlTransaction 或者OleDbTransaction 对象。而且这个对象有 Commit 和 Rollback 方法来管理事务,具体例子如下:

cnNorthwind.Open()

Dim trans As SqlTransaction = cnNorthwind.BeginTransaction()

Dim cmDel As New SqlCommand()

cmDel.Connection = cnNorthwind

cmDel.Transaction = trans

Try

cmDel.CommandText = _

"DELETE [Order Details] WHERE ProductID = 42"

cmDel.ExecuteNonQuery()

cmDel.CommandText = "DELETE Products WHERE ProductID = 42"

cmDel.ExecuteNonQuery()

trans.Commit()

Catch Xcp As Exception

trans.Rollback()

Finally

cnNorthwind.Close()

End Try

Ok,通过上面的例子可以实现与方法1同样的效果。

并发问题:

如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。并发问题包括: 丢失或覆盖更新,未确认的相关性(脏读),不一致的分析(非重复读),幻像读。但是如何来避免数据读取时脏读等问题出现呢?

您可以参考后面我写的文章:如何在.NET中实现事务(2)

时间: 2024-10-30 22:09:00

如何在.NET中实现事务(1)的相关文章

如何在.NET中实现事务(2)

并发问题 如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题.并发问题包括: 丢失或覆盖更新,未确认的相关性(脏读),不一致的分析(非重复读),幻像读.但是如何来避免数据读取时脏读等问题出现呢?这里简单介绍一下: 在SQL Server数据库中,提供四种隔离级别:未提交读.提交读.可重复读.可串行读.这四种隔离级别可以不同程度地保证并发的数据完整性: 隔离级别 脏 读 不可重复读取 幻 像 未提交读 是 是 是 提交读 否 是 是 可重复读 否 否 是 可

qt-如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新

问题描述 如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新 本人是个菜鸟在做一个简单的同学录系统,这是进入之后的界面 我想实现鼠标选取一个表格点击"修改同学信息"之后能对它在修改并且修改确定后能同步刷新MySQL数据库而且表格中的数据也更新. 下面是我的代码:#include ""record.h""#include ""ui_record.h""#include &qu

Win7系统如何在excel中添加word文档结构图

  Win7系统如何在excel中添加word文档结构图          方法一: Word提供了一个很方便的功能--文档结构图,通过文档结构图可以在整个文档中快速浏览并追踪特定的文件内容位置.文档结构图是一个独立的窗口,类似于大纲视图,它能够显示文档的标题,单击文档结构图中的标题后,Word就会自动转到文档中的相应标题,并将其显示在窗口的顶部.用户可以单击菜单""视图"-"文档结构图"来打开它.但是EXCEL中没有提供文档结构图,那么如何管理数据量较大

如何在java中实现读取一个txt文档中的随机一行

问题描述 如何在java中实现读取一个txt文档中的随机一行 如题,如何在java中实现读取一个txt文档中的随机一行? 主要就是怎么随机读取 解决方案 根据楼上的说法,来总结一下吧,总体来说,就是将文件全部都读取出来,每一行存储到一个数组或集合中,然后再通过产生随机数,来对这个数组或是 集合进行随机的访问.这样一来就解决了 解决方案二: 文本文件只能顺序读,不能随机读.你的需求只能是读取文本文件每一行到一个arraylist,然后得到下标范围,产生一个随机数,取那一行 解决方案三: http:

如何在ftp中开放tar权限

问题描述 如何在ftp中开放tar权限 看到有大神说,想在ftp中get一个目录mydir,可以直接使用命令get mydir.tar即可,ftp服务会自动打包的.可是为什么我做不到.该如何开放ftp中的tar权限呢 解决方案 ftp本身没有你说的功能,要看你的服务器用的是什么

以前收集的一些资料---如何在ASP中通过ODBC调用Excel中的数据

excel|odbc|数据                如何在ASP中通过ODBC调用Excel中的数据    在ASP中通过ODBC调用Excel中的数据方式和普通的通过ODBC调用数据库的方式有一些不同的地方.下面将介绍如何通过ODBC在ASP中使用Excel的数据.    在使用的过程中,要注意的是你需要使用的ODBC驱动为:Microsoft ODBC Driver for Excel. 下面给出一个例子来具体说明如何调用的过程:1.在Excel的电子表格中新建一个叫Range的表单a

多线程-如何在OpenGL中渲染多个视频

问题描述 如何在OpenGL中渲染多个视频 程序使用win32开发,视频使用ffmpeg进行帧的截取,然后贴到OpenGL纹理中,渲染一个视频的话不用使用到多线程,处理能力足够快,但是现在需要渲染多个视频,不可能在主线程完成,两三个视频基本上窗口就卡死了.后来改用多线程,建立了两个OpenGL的上下文环境,一个线程负责更新纹理,主线程负责渲染,但是更新纹理的线程依然是照着视频一个个照顺序截,截完再通知主线程画出来,本来以为这样的结构应该没问题,结果渲染速度依然达不到要求,现在想问问有什么办法做到

如何在java中实现依次弹出窗体?

问题描述 如何在java中实现依次弹出窗体? 5C 具体要求如下,窗体都是jframe,主窗体中有n个复选框,每个复选框对应一个窗体,勾选完以后,点击按钮,根据是否选中复选框,依次按顺序从上到下将复选框的窗体弹出,要求在前一个窗体关闭后,才能弹出下一个窗体.这个机制如何实现? 解决方案 了解下 JDialog并且注意它的 setModal(true)属性 解决方案二: 了解下 JDialog并且注意它的 setModal(true)属性 解决方案三: 那怎么知道前一个窗体关了没有,, 解决方案四

jpeg-如何在JPEG中添加exif信息,我用的是sanselan

问题描述 如何在JPEG中添加exif信息,我用的是sanselan exif信息是key-value形式存储的的,我想新增一个新的exif信息.但网上似乎没有这方面的资料,只能对原有的exif信息进行编辑,无法新增. 哈,望大能们施加援手,不胜感激.