2012-08-22 9 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

당신이 사용하는 사용하는 대신 자신에게 연결

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은 무엇을 나타 냅니까? –

관련 문제