【发布时间】:2019-07-01 05:22:56
【问题描述】:
我有一个简单的 SQL 查询,在执行查询时在服务器端的 DB 中被触发,有时它会显示错误消息:
超时。在操作完成之前超时时间已过或服务器没有响应。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在 System System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async) 在 System.Data.SqlClient.SqlCommand 的 .Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)。 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 处的 InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
我的查询是:
If sqlconn.State = ConnectionState.Closed Then sqlconn.Open()
Txn = sqlconn.BeginTransaction
cmd = sqlconn.CreateCommand
cmd.Transaction = Txn
strSql = "insert into " & tableName _
& " (RepSerNo,ProductType,ProductID,ProductName,Qty,GrpQty,IDSNo,CubicalNo,BatchNo,BalanceId," _
& "VernierID,UserID,UserName,PrDate,PrTime,Side,Unit,DecimalPoint," _
& "WgmtModeNo,InstruID,Nom,PosTol,NegTol,NomEmpty,PosTolEmpty,NegTolEmpty," _
& "NomNet,PosTolNet,NegTolNet,RepoLabel1,RepoLabel2,RepoLabel3,RepoLabel4,RepoLabel5," _
& "RepoLabel6,RepoLabel7,RepoLabel8,RepoLabel9,RepoLabel10,RepoLabel11, " _
& "RepoLabel12,RepoLabel13,RepoLabel14,RepoLabel15,RepoLabel16,RepoLabel17," _
& "RepoLabel18,RepoLabel19,RepoLabel20)" _
& " values(" _
& RepBatchSrNo & "," & ProductType(cno) & "," & Chr(39) & ProductId(cno) & Chr(39) & "," & Chr(39) & Product_Name(cno) & Chr(39) & "," & Qty(cno) & "," & GrpQty(cno) & "," & IDSNo(cno) & "," & CubicNo(cno) & "," & Chr(39) & BatchNo(cno) & Chr(39) & "," & Chr(39) & balanceIdforTabCap(cno) & Chr(39) & "," _
& Chr(39) & VernierId(cno) & Chr(39) & "," & Chr(39) & UserId(cno) & Chr(39) & "," & Chr(39) & UserName(cno) & Chr(39) & "," & DT & "," & Chr(39) & TM & Chr(39) & "," & Chr(39) & SIDE(cno) & Chr(39) & "," & Chr(39) & unit(cno) & Chr(39) & "," & DecimalPoint(cno) & "," _
& wgmtmodeNo & "," & instruID(cno) & "," & NomValLmt(cno, 2) & "," & UppValPer(cno, 2) & "," & LwrValPer(cno, 2) & "," & NomValLmt(cno, 3) & "," & UppValPer(cno, 3) & "," & LwrValPer(cno, 3) & "," _
& NomValLmt(cno, 0) & "," & UppValPer(cno, 0) & "," & LwrValPer(cno, 0) & "," & Chr(39) & Trim$(ReportLabels(cno, 1)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 2)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 3)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 4)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 5)) & Chr(39) & "," _
& Chr(39) & Trim$(ReportLabels(cno, 6)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 7)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 8)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 9)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 10)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 11)) & Chr(39) & "," _
& Chr(39) & Trim$(ReportLabels(cno, 12)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 13)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 14)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 15)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 16)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 17)) & Chr(39) & "," _
& Chr(39) & Trim$(ReportLabels(cno, 18)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 19)) & Chr(39) & "," & Chr(39) & Trim$(ReportLabels(cno, 20)) & Chr(39) & ")"
addToLogAudit("from savedata_new() for master:" & strSql)
cmd.CommandText = strSql
cmd.CommandTimeout = 0 'already included command timeout to 0 still its not working
res = cmd.ExecuteNonQuery()
我已经包含 Cmd.Commandtimout=0 仍然收到相同的错误消息 感谢您的帮助,提前致谢。
【问题讨论】:
-
请不要使用字符串连接来创建查询,因为这会使您的代码容易受到 SQL 注入攻击以及 SQL 语法错误的影响。使用 SqlParameters。 How can I avoid SQL injection attacks?
-
cmd是一种 IDisposable 类型,因此应该在Using块中。你正在做sqlconn的方式意味着你试图让它保持活力,这是一个坏主意,连接池意味着它可以非常有效地为你正在做的每件事打开一个新连接 - SqlConnection 类型是也是 IDisposable,所以也应该在Using块中。
标签: sql-server vb.net