大家先看下面的代码: case "Microsoft.Data.Odbc.OdbcConnection":
Microsoft.Data.Odbc.OdbcCommand cmd = (Microsoft.Data.Odbc.OdbcCommand)iCnn.CreateCommand();
cmd.CommandText = strQuery; Microsoft.Data.Odbc.OdbcDataAdapter da = new Microsoft.Data.Odbc.OdbcDataAdapter(cmd);

//iDA = new Microsoft.Data.Odbc.OdbcDataAdapter(strQuery,
// (Microsoft.Data.Odbc.OdbcConnection)iCnn);

da.Fill(dsResult); da.Dispose();
cmd.Dispose(); da = null;
cmd = null;break;我是在用NotesSQL查询Notes数据库的时候。如果DataAdapter用DataAdapter(string StrQuery, ODBCConnection conn)这种构造函数,不管关闭不关闭连接,都要出错。
如果用ODBCCommand做为中间传递的对象,就不会出错,请问这是为什么?另外。出错是在NotesSQL里面出错,然后报ODBC.DLL堆宅溢出。

解决方案 »

  1.   

    错误是NotesSQL的错误。捕捉不到的。是什么某个地址的指令访问了0x000000地址空间什么的
      

  2.   

    /// <summary>
    /// 执行查询语句返回结果集
    /// </summary>
    /// <param name="strQuery">查询语句</param>
    /// <param name="iCnn">数据连接</param>
    /// <returns></returns>
    /// <res>如果发生了异常,直接向上级调用抛出异常,由上级调用处理。</res>
    public static DataSet QueryResult(string strQuery,IDbConnection iCnn)
    { DataSet dsResult = new DataSet();//返回的结果集
    IDataAdapter iDA = null; try
    {
    if (iCnn == null )
    {
    throw new Exception("数据库连接未初始化!");
    }
    else
    {
    //检查数据库连接是否正常
    if (iCnn.State != System.Data.ConnectionState.Open)
    {
    try
    {
    iCnn.Open();
    }
    catch
    {
    throw new Exception("数据库连接打开失败!");
    }
    } //根据数据连接类型创建数据访问类
    switch (iCnn.GetType().ToString())
    {
    case "System.Data.SqlClient.SqlConnection":
    iDA = new System.Data.SqlClient.SqlDataAdapter(strQuery,
    (System.Data.SqlClient.SqlConnection)iCnn); break; case "System.Data.OleDb.OleDbConnection":
    iDA = new System.Data.OleDb.OleDbDataAdapter(strQuery,
    (System.Data.OleDb.OleDbConnection)iCnn); break; case "System.Data.OracleClient.OracleConnection":
    iDA = new System.Data.OracleClient.OracleDataAdapter(strQuery,
    (System.Data.OracleClient.OracleConnection)iCnn); break; case "Microsoft.Data.Odbc.OdbcConnection":
    //Microsoft.Data.Odbc.OdbcDataAdapter oDA = new Microsoft.Data.Odbc.OdbcDataAdapter(strQuery,
    // (Microsoft.Data.Odbc.OdbcConnection)iCnn);

    //oDA.Fill(dsResult);
    //oDA.Dispose();
    //oDA = null; Microsoft.Data.Odbc.OdbcCommand cmd = (Microsoft.Data.Odbc.OdbcCommand)iCnn.CreateCommand();
    cmd.CommandText = strQuery; Microsoft.Data.Odbc.OdbcDataAdapter da = new Microsoft.Data.Odbc.OdbcDataAdapter(cmd);

    //iDA = new Microsoft.Data.Odbc.OdbcDataAdapter(strQuery,
    // (Microsoft.Data.Odbc.OdbcConnection)iCnn);

    da.Fill(dsResult); da.Dispose();
    cmd.Dispose(); da = null;
    cmd = null; break;
    } if (iDA != null)
    {
    ((Microsoft.Data.Odbc.OdbcDataAdapter)iDA).Fill(dsResult);
    ((Microsoft.Data.Odbc.OdbcDataAdapter)iDA).Dispose();

    }

    }
    }
    catch (Exception exp)
    {
    #if (DEBUG)
    Debug.WriteLine(exp.ToString());
    MessageBox.Show(exp.ToString());
    //Application.Exit();
    #endif
    }

    iDA = null; return dsResult;
    }
    这是整个方法的代码