在.Net中连接一个特殊数据库(SecBase),该库已经提供ODBC接口,代码如下:string strConn = "DSN=SECWDGL;UID=SYSTEM;PWD=MANAGER";
OdbcConnection gwConn = new OdbcConnection(strConn);
string strCmd = "SELECT * FROM MA.G_DJ2004";
OdbcCommand cmd = new OdbcCommand(strCmd,gwConn);
DataSet ds = new DataSet();
OdbcDataAdapter oda = new OdbcDataAdapter(cmd);
try
{
gwConn.Open();
oda.Fill(ds,"gw");
}数据库连接Open没有问题,但是执行到Fill时出现错误:************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
   at System.Data.Common.Odbc32.SQLFetch(HandleRef StatementHandle)
   at System.Data.Odbc.OdbcDataReader.Read()
   at System.Data.Common.DbDataAdapter.FillLoadDataRow(SchemaMapping mapping)
   at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
   at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
   at NmirsDBImport.FormMain.button1_Click(Object sender, EventArgs e) in c:\documents and settings\administrator\my documents\visual studio projects\nmirsdbimport\formmain.cs:line 256
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)用WinSQL打开该库却没有任何问题,不知问题在什么地方?

解决方案 »

  1.   

    这个不是ODBC连接问题 
    是你的程序错了,运用了还没有实例化的变量
      

  2.   

    不要填充  直接reader看看有么有记录读出来
      

  3.   

    直接Update或者Delete不会出错:string strConn = "DSN=SECWDGL;UID=SYSTEM;PWD=MANAGER";
    OdbcConnection gwConn = new OdbcConnection(strConn);
    gwConn.Open();
    string strCmd = "UPDATE MA.G_DJ2004 SET XH=1 ";
    OdbcCommand cmd = new OdbcCommand(strCmd,gwConn);
    cmd.ExecuteNonQuery();但如果Select就会出错,Read也不行:string strConn = "DSN=SECWDGL;UID=SYSTEM;PWD=MANAGER";
    OdbcConnection gwConn = new OdbcConnection(strConn);
    gwConn.Open();
    string strCmd = "SELECT * FROM MA.G_DJ2004 WHERE XH=1";
    OdbcCommand cmd = new OdbcCommand(strCmd,gwConn);
    OdbcDataReader reader = cmd.ExecuteReader();
    while(reader.Read()){string strTmp= reader.ToString();}
    gwConn.Close();
      

  4.   

    倒数第二句
    while(reader.Read()){string strTmp= reader.ToString();}
    改成
    while(reader.Read()){string strTmp= reader.ToString(0);}
    试试。程序开头加
    using Systerm.Data;
    using Systerm.Data.Odbc;
    试一下
      

  5.   

    reader.ToString(0); ?
    啥意思?
      

  6.   

    DataSet ds = new DataSet();这句好象有问题。
      

  7.   

    请问版主,你的问题解决了吗?我现在也遇到此类问题,secbase提供jdbc接口吗?