问题描述
我使用 .Net framework 4.5
和 Microsoft OleDb
Provider For DB2 v6 连接到 db2 并调用存储过程并将数据读入数据表。
public DataTable SendQuery(OleDbCommand command)
{
DataTable table = null;
lock (lockObj)
{
if (connection == null || connection?.State != ConnectionState.Open)
{
connection?.Close();
try
{
connection = new OleDbConnection();
connection.ConnectionString = "Provider=DB2OLEDB.1;Password=MyPass;Persist Security Info=True;User ID=MyUser;Initial Catalog=DSNP;Data Source=DSNP;Network Address=5.5.5.5;Network Port=555;Default Schema=MySchema";
connection.open();
}
catch (Exception ex)
{
throw ex;
}
}
for (int i = 1; i <= _maxRetry; i++)
{
try
{
table = null;
command.Connection = connection;
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
table = new DataTable("ResultTable");
adapter.Fill(table);
break;
}
catch (OleDbException ex)
{
connection?.Close();
Connect();
if (i == _maxRetry) throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
}
return (table);
}
此代码工作正常,但有几次不明原因我收到此错误,特别是当我的服务从网络中的另一个系统调用时。这是我的堆栈跟踪:
OleDbException: [StackTrace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBParaMS dbParams,Object&executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,Object&executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,String 方法) 在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为) 在 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior 行为) 在 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,DataTable[] datatables,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为) 在 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables,CommandBehavior 行为) 在 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) 在 ReportDataAccess.DB2Connection.SendQuery(OleDbCommand 命令),HResult:-2147217900,other:{"oledbErrors":[{"Message":"发生网络库错误 (6): 句柄无效。\r\n","NativeError":6,"Source":"Microsoft DB2 OLE DB Provider","sqlState":"HY000"}],"ClassName":"System.Data.OleDb.OleDbException","Message":"网络发生库错误 (6):句柄无效。","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":" at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)\r\n 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBParaMS dbParams,Object& executeResult)\r\n 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n 在 System.Data。 OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,Object&executeResult)\r\n 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,String 方法)\r\n 在 System.Data.OleDb.OleDbCommand.Execute Reader(CommandBehavior 行为)\r\n 在 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior 行为)\r\n 在 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,DataTable[]数据表、Int32 startRecord、Int32 maxRecords、String srcTable、IDbCommand 命令、CommandBehavior 行为)\r\n 在 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables,CommandBehavior 行为)\ r\n 在 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)\r\n 在 ReportDataAccess.DB2Connection.SendQuery(OleDbCommand command)","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":" 8\nExecuteCommandTextErrorHandling\nSystem.Data,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\nSystem.Data.OleDb.OleDbCommand\nVoid ExecuteCommandTextErrorHandling(System.Data.OleDb.OleDb90"2"2H7Result) "来源":"Microsoft DB2 OLE DB 提供程序","WatsonBuckets":null}] |
我尝试重新连接或重试填充数据表以解决我的问题,有时此解决方案有效,但有时无效! 注意:这是我的第一个问题,所以如果您需要更多数据,请发表评论。
问候
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)