在Data.xsd上创建Sql TransAction方法

时间:2010-02-08 00:45:36

标签: c# .net dataset

我在项目中添加了一个名为myDataSet.xsd的数据集项 在此之后,我在myDataSet.xsd文件上删除表。这都是好事。 我想要做的是,将Sql Transaction作为函数构建 那个数据集,我该怎么做?

1 个答案:

答案 0 :(得分:2)

DataSet是内存中的结构 - 与SQL或SqlTransaction没有直接关系。

我认为您可能指的是使用SQL事务对生成的TableAdapter实例执行操作。

这很棘手。

Sahil Malik在这个问题上有一个相当完整的primer(是的,它确实是一个“主题”)。基本上归结为通过使用TableAdapter方法的部分类扩展BeginTransaction,打开内部SqlConnection并将其保持打开状态,并将您移回SqlTransaction然后你可以正常使用它。这很麻烦,你必须为每个TableAdapter执行此操作。或者,您可以使用System.Transactions.TransactionScope,但是您必须跳过各种环节以避免升级到DTC(分布式事务)。

我建议你看一下链接的文章,而不是我在这里复制和粘贴代码。

如果你有很多TableAdapters,或者通常需要在一次交易中合并多个,那么Sahil的方法不会扩展得太好。在过去(当我仍然使用TableAdapters时),我使用了类似于Ryan Whitaker's的方法,它基本上是猴子修补;它使用反射进行大部分繁重的工作。

这两者是使TableAdapter代码在事务上安全的最终资源。就个人而言,我根本不会再使用键入的DataSet;现在,Linq对SQL和EF的使用已经过时,它们更强大,延迟执行,不依赖于内存结构,并且使用表数据网关+工作单元模式非常容易处理交易。根据我的经验,如果那些不够,通常DataSet和我都不得下降到SqlCommand个实例。但如果由于某种原因你绝对必须使用DataSet进行数据访问,那么前面提到的两种方法之一应该是你需要的。