问题描述
publicstaticBooleanExecuteQuery(stringConnectionSql,string[]ExeuteSql)//这里有个sql语句string数组{BooleanRtn=true;SqlConnection_SqlConn=newSqlConnection(ConnectionSql);_SqlConn.Open();SqlTransactiontrans=_SqlConn.BeginTransaction();try{foreach(stringsqlinExeuteSql){if(sql.Trim()!=""){ExecuteQueryEnd(_SqlConn,trans,sql);//执行下面的方法,到后面一起提交,防止出现有的提交有的不能提交的问题}else{continue;}}trans.Commit();}catch(System.Data.SqlClient.SqlExceptione){trans.Rollback();Rtn=false;thrownewException(e.Message);}_SqlConn.Close();returnRtn;}publicstaticvoidExecuteQueryEnd(SqlConnectionconn,SqlTransactionstr,stringsqlcmd){SqlCommand_Scmd=newSqlCommand(sqlcmd,conn);_Scmd.Transaction=str;_Scmd.CommandType=CommandType.Text;_Scmd.CommandTimeout=6000;try{_Scmd.ExecuteNonQuery();}catch{str.Rollback();}}
解决方案
解决方案二:
直接这样改算了publicstaticBooleanExecuteQuery(stringConnectionSql,string[]ExeuteSql)//这里有个sql语句string数组{BooleanRtn=true;SqlConnection_SqlConn=newSqlConnection(ConnectionSql);_SqlConn.Open();SqlTransactiontrans=_SqlConn.BeginTransaction();try{string_str="";foreach(stringsqlinExeuteSql){if(sql.Trim()!=""){_str=_str+sql+";";}else{continue;}}ExecuteQueryEnd(SqlConn,trans);trans.Commit();}catch(System.Data.SqlClient.SqlExceptione){trans.Rollback();Rtn=false;thrownewException(e.Message);}_SqlConn.Close();returnRtn;}publicstaticvoidExecuteQueryEnd(SqlConnectionconn,SqlTransactionstr,stringsqlcmd){SqlCommand_Scmd=newSqlCommand(sqlcmd,conn);_Scmd.Transaction=str;_Scmd.CommandType=CommandType.Text;_Scmd.CommandTimeout=6000;try{_Scmd.ExecuteNonQuery();}catch{str.Rollback();}}
解决方案三:
还是不行啊,只有两行记录,都好久,如果采用每次提交很快的
解决方案四:
oo
解决方案五:
string[]ExeuteSql里面是什么?是insertinto...还是调了SP?
解决方案六:
string[]ExeuteSql里面是什么?是insertinto...还是调了SP?有delete,insertinto都有
解决方案七:
事务必须在每个执行里都begin然后要end,你所有的操作只有一个begin,可能被事务锁死了
解决方案八:
我有commit,同rollback啊
解决方案九:
你把你现在出现的问题描述清楚,看的不是很明白]还有最好把ExeuteSql的值帖出来看看
解决方案十:
你的sql数组里有没有可能对同一个数据项进行更新和查询操作?如果有的话有可能会被锁死,你可以在变得很慢的时候到管理器里的进程管理器查看是否进程锁死了。
解决方案十一:
楼上所说的,我查了,没有被锁死,我把生成的sql语句放到查询分析器,很快就可以执行,我还是觉得哪两个方法有问题,但一时找不出是哪里问题
解决方案十二:
我发现在同一数据库操作没问题,如是两个数据库之间查询就不行,如selecta.code,b.namefromtablea,[192.168.0.66].dbo.tablebwherea.code=b.code这样查询结果更新有问题
解决方案十三:
引用11楼zsyutiannew的回复:
我发现在同一数据库操作没问题,如是两个数据库之间查询就不行,如selecta.code,b.namefromtablea,[192.168.0.66].dbo.tablebwherea.code=b.code这样查询结果更新有问题
这样需要先添加链接服务器的
解决方案十四:
你把_Scmd.CommandTimeout=6000;这行注释掉试试