Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IBMDB2 OLeDB连接异常;试图读取或写入受保护的内存。这通常表示其他内存已损坏;_C#_.net_Exception Handling_Db2_Oledbdatareader - Fatal编程技术网

C# IBMDB2 OLeDB连接异常;试图读取或写入受保护的内存。这通常表示其他内存已损坏;

C# IBMDB2 OLeDB连接异常;试图读取或写入受保护的内存。这通常表示其他内存已损坏;,c#,.net,exception-handling,db2,oledbdatareader,C#,.net,Exception Handling,Db2,Oledbdatareader,在平台目标x64上运行程序时遇到非常奇怪的问题。它在x86上绝对可以正常工作 复制步骤: 安装在远程计算机上的db2服务器 安装在本地计算机上的db2客户机 现在运行此程序(仅在将平台目标AnyCpu更改为x64之后)。 然后问题出现在OleDbCommand.ExecuteReader()上 奇怪的行为:使用x86平台。此程序运行正常。 附言:我已经验证了这个程序。它适用于所有服务器,如SQL、MySQL、Oracle等。问题仅限于IBMDB2服务器 using System; using S

在平台目标x64上运行程序时遇到非常奇怪的问题。它在x86上绝对可以正常工作

复制步骤:

  • 安装在远程计算机上的db2服务器
  • 安装在本地计算机上的db2客户机
  • 现在运行此程序(仅在将平台目标AnyCpu更改为x64之后)。 然后问题出现在OleDbCommand.ExecuteReader()上
  • 奇怪的行为:使用x86平台。此程序运行正常。

    附言:我已经验证了这个程序。它适用于所有服务器,如SQL、MySQL、Oracle等。问题仅限于IBMDB2服务器

    using System;
    using System.Threading;
    
    namespace OledbAndOdbc
    {
     public class Program
    {
        static string odbcstr = "Driver={IBM DB2 ODBC DRIVER};Database=xxxx;Hostname=xxxx;Port=50000;Protocol=TCPIP;Uid=xxxx;Pwd=xxxx;";
        static string oledbStr = "Provider=IBMDADB2;Database=xxxx;Hostname=xxxx;Protocol=TCPIP;Port=50000;Uid=xxxx;Pwd=xxxx;";
    
        static string strSQLODBC = "select  * from CUSTOMERS ;";
        static string strOLedb = "select * from CUSTOMERS ;";
        public static void ConnectionCallback(object callback)
        {
            int[] array = callback as int[];
            if (0 == Convert.ToInt32(array[1])) // ODBC connection
            {
                System.Data.Odbc.OdbcConnection odbcConnection = new System.Data.Odbc.OdbcConnection(odbcstr);
                odbcConnection.Open();
                System.Data.Odbc.OdbcCommand ODBCCommand = new System.Data.Odbc.OdbcCommand(strSQLODBC, odbcConnection);
                ODBCCommand.CommandTimeout = 120;
                System.Data.Common.DbDataReader dataReader = ODBCCommand.ExecuteReader();
                while (dataReader.Read())
                {
                   // Todo
                }
            }
            if (1 == Convert.ToInt32(array[0])) // OLeDB connection
            {
                System.Data.OleDb.OleDbConnection oleDbConnection = new System.Data.OleDb.OleDbConnection(oledbStr);
                oleDbConnection.Open();
                System.Data.OleDb.OleDbCommand OleDbCommand = new System.Data.OleDb.OleDbCommand(strOLedb, oleDbConnection);
                OleDbCommand.CommandTimeout = 120;
                System.Data.Common.DbDataReader dataReader = OleDbCommand.ExecuteReader();
                while (dataReader.Read())
                {
                   //to do
                }
            }
        }
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                ThreadPool.QueueUserWorkItem(Program.ConnectionCallback, new int[] { 1, 0 });
            }
            Thread.CurrentThread.Join();
        }
    }
    
    使用系统;
    使用系统线程;
    名称空间ODBC
    {
    公共课程
    {
    静态字符串odbcstr=“Driver={IBM DB2 ODBC Driver};数据库=xxxx;主机名=xxxx;端口=50000;协议=TCPIP;Uid=xxxx;Pwd=xxxx;”;
    静态字符串oledbStr=“Provider=IBMDADB2;Database=xxxx;Hostname=xxxx;Protocol=TCPIP;Port=50000;Uid=xxxx;Pwd=xxxx;”;
    静态字符串strSQLODBC=“select*from CUSTOMERS;”;
    静态字符串strOLedb=“选择*来自客户;”;
    公共静态void ConnectionCallback(对象回调)
    {
    int[]数组=回调为int[];
    if(0==Convert.ToInt32(数组[1])//ODBC连接
    {
    System.Data.Odbc.OdbcConnection-OdbcConnection=new System.Data.Odbc.OdbcConnection(odbcstr);
    odbcConnection.Open();
    System.Data.Odbc.OdbcCommand OdbcCommand=新的System.Data.Odbc.OdbcCommand(strSQLODBC,odbcConnection);
    ODBCCommand.CommandTimeout=120;
    System.Data.Common.DbDataReader dataReader=ODBCCommand.ExecuteReader();
    while(dataReader.Read())
    {
    //待办事项
    }
    }
    if(1==Convert.ToInt32(数组[0])//OLeDB连接
    {
    System.Data.OleDb.OleDbConnection-OleDbConnection=new System.Data.OleDb.OleDbConnection(oledbStr);
    oleDbConnection.Open();
    System.Data.OleDb.OleDbCommand-OleDbCommand=新的System.Data.OleDb.OleDbCommand(strOLedb,oleDbConnection);
    OleDbCommand.CommandTimeout=120;
    System.Data.Common.DbDataReader-dataReader=OleDbCommand.ExecuteReader();
    while(dataReader.Read())
    {
    //做
    }
    }
    }
    静态void Main(字符串[]参数)
    {
    对于(int i=0;i<10;i++)
    {
    QueueUserWorkItem(Program.ConnectionCallback,new int[]{1,0});
    }
    Thread.CurrentThread.Join();
    }
    }
    

    }

    编辑您的问题,指定您使用的Db2客户机的确切版本以及供应商是谁?(MS或IBM)等。我使用的是IBM DB2客户机11.1 x64bit。只有当我将平台目标从visual studio 2015更改为x64时,我才会面临这个问题。但是,它在visual studio目标平台x86上工作得非常好。它在哪些版本的Windows x64上出现故障?它适用于哪些32位版本?我正在windows 2k12 R2 64位计算机上通过visual studio 2015运行此程序。只有当我将程序平台目标更改为x64时,才会出现此问题。通过右键单击->程序->属性->平台目标。它可以与“AnyCpu”和“x86”一起使用,但不能与“x64”一起使用。您是否调试过以查找导致异常的代码行?