Microsoft DB2 OLE DB 提供程序:发生网络库错误 (6):句柄无效

问题描述

我使用 .Net framework 4.5Microsoft 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...