我在项目中添加了一个名为myDataSet.xsd的数据集项 在此之后,我在myDataSet.xsd文件上删除表。这都是好事。 我想要做的是,将Sql Transaction作为函数构建 那个数据集,我该怎么做?
答案 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
进行数据访问,那么前面提到的两种方法之一应该是你需要的。