2012-08-22 121 views
4

下面是我用來連接到Access數據庫並從查詢中提取值的代碼。問題是..我無法從讀者對象獲取任何值。我可以看到有正確數量的行,但是我不斷收到一個InvalidOperationException異常(無論我使用GetValue()還是GetString()),說「沒有數據存在行/列」。從Access數據庫中讀取OleDbDataReader的值

 System.Data.OleDb.OleDbConnection conn = new 
     System.Data.OleDb.OleDbConnection(); 
     conn.ConnectionString = @"Provider=Microsoft Office 12.0 Access Database Engine OLE DB Provider;" + 
           @"Data source= C:\Users\nearod\Desktop\ImportDB.accdb"; 
     try 
     { 
      conn.Open(); 
      OleDbCommand cmd = new OleDbCommand("SELECT * FROM [SQL Agent Unique ID Test Load]", conn); 

      OleDbDataReader reader = cmd.ExecuteReader(); 

      string companyCode = reader.GetValue(0).ToString(); 
      string agentId = reader.GetString(1); 
      string firstName = reader.GetString(2); 
      string lastName = reader.GetString(3); 
      string nameSuffix = reader.GetString(4); 
      string corporateName = reader.GetString(5); 
      string entityType = reader.GetString(6); 
      string obfSSN = reader.GetString(7); 
      string obfFEIN = reader.GetString(8); 
      string dummyIndicator = reader.GetString(9); 
      // Insert code to process data. 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Failed to connect to data source"); 
     } 
     finally 
     { 
      conn.Close(); 
     } 

回答

14

你必須調用Read方法如下圖所示(使用用途,而不是你自己處置連接

string connectionString = @"Provider=Microsoft Office 12.0 Access Database Engine OLE DB Provider;" + @"Data source= C:\Users\nearod\Desktop\ImportDB.accdb"; 

string queryString= "SELECT * FROM [SQL Agent Unique ID Test Load]"; 
try 
    { 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
     { 
      OleDbCommand command = new OleDbCommand(queryString, connection); 
      connection.Open(); 
      OleDbDataReader reader = command.ExecuteReader(); 

      while (reader.Read()) 
      { 
       string companyCode = reader.GetValue(0).ToString(); 
      string agentId = reader.GetString(1); 
      string firstName = reader.GetString(2); 
      string lastName = reader.GetString(3); 
      string nameSuffix = reader.GetString(4); 
      string corporateName = reader.GetString(5); 
      string entityType = reader.GetString(6); 
      string obfSSN = reader.GetString(7); 
      string obfFEIN = reader.GetString(8); 
      string dummyIndicator = reader.GetString(9); 
      // Insert code to process data. 
      } 
      reader.Close(); 
     } 
    } 
catch (Exception ex) 
    { 
      MessageBox.Show("Failed to connect to data source"); 
    } 
+0

好工作...... .. –

5

修改這樣的代碼:

using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     OleDbCommand command = new OleDbCommand(queryString, connection); 
     connection.Open(); 

     using (OleDbDataReader reader = command.ExecuteReader()) 
     { 

      while (reader.Read()) 
      { 
       string companyCode = reader.GetValue(0).ToString(); 
       string agentId = reader.GetString(1); 
       string firstName = reader.GetString(2); 
       string lastName = reader.GetString(3); 
       string nameSuffix = reader.GetString(4); 
       string corporateName = reader.GetString(5); 
       string entityType = reader.GetString(6); 
       string obfSSN = reader.GetString(7); 
       string obfFEIN = reader.GetString(8); 
       string dummyIndicator = reader.GetString(9); 
       // Insert code to process data. 
      } 
     } 
    } 
+0

'getstring(0)'中的0代表什麼? –