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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?