我偶尔会遇到这个错误。当我重新启动IIS时,这个问题就解决了。web服务器(IIS)有超过10个站点托管,所以我不能同时重新启动它。
System.Data.SqlClient.SqlException: Distributed transaction completed. Either enlist
this session in a new transaction or the NULL transaction. at
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean
breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection) at
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,
SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at
System.Data.SqlClient.SqlDataReader.get_MetaData() at
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior
runBehavior, String resetOptionsString) at
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,
RunBehavior runBehavior, Boolean returnStream, Boolean async) at
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior
runBehavior, Boolean returnStream, String method, DbAsyncResult result) at
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior
runBehavior, Boolean returnStream, String method) at
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at
System.Data.SqlClient.SqlCommand.ExecuteReader() at MyLibrary.LoadDDList(DropDownList&
curDDL, String strTextField, String strValueField, String strTable, String svarconditional)
请帮我找到一个最好不涉及重新启动IIS的解决方案。
在MyLibrary类中有一个名为LoadDDList的函数。
这个函数需要在ExecuteReader()命令周围执行Try Catch。
Try
mySqlCommand.ExecuteReader()
Catch sqlException As SqlClient.SqlException
If sqlException.ErrorCode >= 10 Then
Throw
End If
End Try
在catch中,您希望检查ErrorCode是否小于10。如果它小于10,那么它只是一个警告信息,您可以忽略它。如果是10或更大,则需要重新抛出它,因为这是一个实际的SQL错误(解析错误、无效表等)。
查看您的堆栈,这只是一个警告,应该忽略。你需要修复你的代码,这样当你遇到这个SQL警告时,你就不会使IIS崩溃。