问题描述
问题:用WebService实现了一个方法,同时向表A、B插入记录,并启动了事务,调试该方法时当执行向A表中插入了记录语句后终止调试(即:退出程序),发现已经向A表插入数据成功,而程序并没有执行Commit和rollback方法,当将同样的代码拷贝到Windows桌面程序中调式时,如果不执行Commit方法而终止程序执行并不会插入记录成功,如果是这样我的应用程序突然断电,岂不是不能保证数据的完整性,代码如下:[WebMethod]publicvoidTestConnection(){SqlConnectioncnn=newSqlConnection("server=localhost;packetsize=4096;userid=sa;datasource=localhost;persistsecurityinfo=True;initialcatalog=DEMO;password=;ConnectionReset=FALSE;Pooling=FALSE;");SqlTransactiontran=null;try{cnn.Open();tran=cnn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);SqlCommandcmm=newSqlCommand("INSERTINTOCOMTESTVALUES('A','B','C','D','E')",cnn);cmm.Transaction=tran;cmm.ExecuteNonQuery();//当在WebService下调试到上一句立即终止程序执行,数据库成功插入一笔记录,而在WindowsApplication下调试时则不会插入上一笔记录,因为没有执行commit方法,我希望在WebService下也能达到这个效果,保证应用服务器出现故障也能保证事务的完整性cmm=newSqlCommand("INSERTINTOCOMTESTVALUES('B','B','C','D','E')",cnn);tran.Commit();}catch(System.Exceptionerr){tran.Rollback();cnn.Close();}}
解决方案
解决方案二:
个人感觉最好在数据库中设计和执行事务。
解决方案三:
考虑跨数据库问题,系统没有用到存储过程,只有将事务放在程序中实现了,请各位高手帮忙分析原因!
解决方案四:
难道这个问题没人知道原因吗?各位兄弟姐妹们帮帮忙看看如何解决,谢谢各位了!
解决方案五:
顶一下,难道没人知道这个问题的原因吗?高手快出来支招,多谢了
解决方案六:
不太清楚Webservice在调试时是否去启动了事务,可以在Webservice中人为的throw一个错误,然後正常去调Webservice,看是否能插入数据成功。[WebMethod]publicvoidTestConnection(){SqlConnectioncnn=newSqlConnection("server=localhost;packetsize=4096;userid=sa;datasource=localhost;persistsecurityinfo=True;initialcatalog=DEMO;password=;ConnectionReset=FALSE;Pooling=FALSE;");SqlTransactiontran=null;try{cnn.Open();tran=cnn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);SqlCommandcmm=newSqlCommand("INSERTINTOCOMTESTVALUES('A','B','C','D','E')",cnn);cmm.Transaction=tran;cmm.ExecuteNonQuery();//人为抛出一个错误thrownewException("Error!Test");cmm=newSqlCommand("INSERTINTOCOMTESTVALUES('B','B','C','D','E')",cnn);tran.Commit();}catch(System.Exceptionerr){tran.Rollback();cnn.Close();}}