对数据库进行操作的时候,为什么会重复插入相同的数据?
也是用了Tatabale.ADDNew();
也是用了Tatabale.ADDNew();
解决方案 »
- 两个窗口之间传递的问题~~~~~~~新手请教~~~~~~
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 C#开发C/S结构系统的通信问题[刚刚发的问题怎么没了?]
- c#生成可执行文件的问题
- winform 子窗体传值
- pdfbox 如何读出段落
- 问个关于窗体继承的一个问题?
- 如何在程序中操作WORD表格。。。急,有答案就散分!
- 用Excel导入数据到sql数据库,如何用最后一次导入的数据批量修改前次导入的数据?急!!谢谢!!
- private CookieCollection oCookies如何清除其中的Cookies项
- World Wide Web Publishing 启动不了
- 在线求助,急请高手帮忙!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 我在C#中调用windown API播放声音,为什么声音和图像不同步?
如果是的话,你要注意在对数据库更新操作(如:插入、修改、删除),需要异步,否则的话,就会出现你所看到现象,至于如何做的话,有很多,例如用mutex来对操作进行互斥
我现在急切需要解决这个问题!
using System.Data;
using System.Data.SqlClient;
using System.Threading;static Mutex m;
int intRet,nExeCount;
SqlTransaction myTrans;
if(m==null)
m=new Mutex(); //Enter into mutex area
m.WaitOne(); //Execute command
nExeCount=0;
do
{
// Start a local transaction
myTrans = sqlConn.BeginTransaction(IsolationLevel.ReadCommitted,
"MyTransaction");
try
{
// Must assign both transaction object and connection
// to Command object for a pending local transaction
sqlComm.Transaction = myTrans;
sqlComm.CommandTimeout=3600;//Set timeout
intRet=sqlComm.ExecuteNonQuery();
myTrans.Commit();
}
catch(SqlException sqlErr)
{
myTrans.Rollback();
strErrorMessage = sqlErr.Message;
intCodeNumber = (int)DataBaseErr.ErrInSQL;
intRet=-1;
Thread.Sleep(500);
}
catch(Exception Err)
{
myTrans.Rollback();
strErrorMessage = Err.Message;
intCodeNumber = (int)DataBaseErr.ErrInException;
intRet=-1;
}
finally
{
nExeCount++;
};
}while((intRet<0)&&(nExeCount<3)); //Depart from mutex area
m.ReleaseMutex();
第一次更新没问题,第二次更新没问题,第三次或者第四次就出现这种问题了?
Knight94(愚翁)
问题又出在哪了?
要把mutex设为static(最好是全局变量,如果是多个function对数据库操作的话),否则,你每次都new,根本达不到互斥。