我正在开发一个与SQLServer2005数据库通信以执行某些存储过程的应用程序。我的客户要求所有事务都在C#端进行管理,而不是由SQLServer管理,因此我在访问数据库时使用System.Transactions.TransactionScope。但是,我刚刚看到System.Transactions.Transaction数据类型,我很困惑……每种类型的主要优点/缺点是什么?我应该使用哪一个?请注意,我还必须使用EnterpriseLibrary的数据访问应用程序block。 最佳答案 来自msdn:TheTransactio
这是我的交易范围源代码的当前架构。第三个插入抛出一个.NET异常(不是SQL异常)并且它没有回滚前两个插入语句。我做错了什么?编辑:我从insert2和insert3中删除了try/catch。我还从insert1try/catch中删除了异常处理实用程序并放置了“throwex”。它仍然没有回滚事务。编辑2:我在Insert3方法中添加了try/catch,并在catch语句中添加了一个“throw”。它仍然没有回滚事务。更新:根据我收到的反馈,“SqlHelper”类使用SqlConnection对象建立与数据库的连接,然后创建一个SqlCommand对象,将CommandType
我正在使用C#和ADO.Net以及TransactionScope在ASP.Net应用程序中运行事务。此事务应该跨多个表保存一些数据,然后向订阅者发送电子邮件。问题:当它包含对在SQLServer2014中有自己的事务的存储过程的调用时,它是否是TransactionScope的有效使用,或者我应该删除SQL事务语句,即begintran、committran和rollbacktran语句来自在此TransactionScope中调用的存储过程>?这个场景的C#代码和存储过程的T-SQL代码都在下面提到。使用TransactionScope的C#代码:try{using(Transac
为了在我当前的项目中使用,我创建了一个允许我调用SQLServer异步的类。我的代码是这样的:internalclassCommandAndCallback{publicSqlCommandSql{get;set;}publicTCallbackCallback{get;set;}publicTErrorError{get;set;}}classMyCodes:SingletonBase{privatestaticstring_connString=@"DataSource=MyDB;InitialCatalog=ED;IntegratedSecurity=True;Asynchron
我必须用单个事务插入两个表,必须实现的查询如下。其次在SqlDataReaderread=comm.ExecuteReader();获取异常publicvoidSqlExecuteNonQuery(Customerobj){//stringquery="DECLARE@_customerIDint";stringquery1="INSERTINTOcustomer(customerName,customerSex,Email)VALUES('"+obj.name+"','"+obj.sex+"','"+obj.Email+"')";//stringquery2="SET@_custom
我知道对于多部分写入,我应该在nhibernate中使用事务。但是对于简单的读写(1部分)呢……我读到始终使用事务是一种很好的做法。这是必需的吗?我应该做以下简单阅读吗?或者我可以将交易部分全部放在一起吗?publicPrinterJobRetrievePrinterJobById(Guidid){using(ISessionsession=sessionFactory.OpenSession()){using(ITransactiontransaction=session.BeginTransaction()){varprinterJob2=(PrinterJob)session.G
我在本地机器上创建了一个私有(private)MSMQ。我正在使用以下C#代码将消息发送到队列。当我将队列更改为事务性队列时,消息未到达MSMQ。但是,在Send方法中没有抛出异常。我需要进行哪些更改才能使其正常工作?usingSystem;usingSystem.Messaging;usingSystem.Data;publicpartialclass_Default:System.Web.UI.Page{//Sharingviolationresultedfromqueuebeingopenalreadyforexclusivereceive.MessageQueuehelpReq
我正在使用NHibernate存储一些数据,并且我需要插入大量数据作为此操作的一部分-即在同一事务中。代码如下所示:using(ISessionsession=NHibernateHelper.OpenSession())using(ITransactiontransaction=session.BeginTransaction()){session.SaveOrUpdate(something);//...SqlBulkCopybulkCopy=newSqlBulkCopy((SqlConnection)session.Connection,SqlBulkCopyOptions.Ch
背景我有一些代码可以打开一个sql连接,开始一个事务并对数据库执行一些操作。此代码从数据库创建一个对象(出队),获取一些值并将其保存回来。整个操作需要在事务中进行。所有代码在没有事务的情况下都能完美运行。using(varconnection=newSqlConnection(connectionString)){connection.Open();vartransaction=connection.BeginTransaction();try{varmyObject=foo.Dequeue(connection,transaction);varurl=myObj.GetFilePat
我觉得这种行为不应该发生。场景如下:启动一个长时间运行的sql事务。运行sql命令的线程被中止(不是我们的代码!)当线程返回托管代码,SqlConnection的状态是“关闭”——但交易是仍然在sqlserver上打开。可以重新打开SQLConnection,你可以尝试调用回滚交易,但它没有效果(不是我期望的这种行为。关键是没有办法访问数据库上的事务并将其回滚。)问题很简单,线程中止时事务没有正确清理。这是.Net1.1、2.0和2.0SP1的问题。我们正在运行.Net3.5SP1。这里有一个示例程序可以说明这个问题。usingSystem;usingSystem.Collection