【问题标题】:Getting values back from OleDbDataReader reading from Access database从从 Access 数据库读取的 OleDbDataReader 获取值
【发布时间】:2012-08-18 08:21:14
【问题描述】:

下面是我用来连接 Access 数据库并从查询中提取值的代码。问题是..我无法从阅读器对象中获取任何值。我可以看到行数正确,但是我不断收到 InvalidOperationException(无论我使用 GetValue() 还是 GetString()),说“行/列不存在数据。”

        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();
        }

【问题讨论】:

    标签: c# ms-access oledb


    【解决方案1】:

    你必须像下面这样调用 Read 方法(使用 using 而不是处理自己的连接

    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");
       }
    

    【讨论】:

      【解决方案2】:

      像这样修改你的代码:

      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.
                  }
              }
          }
      

      【讨论】:

      • getstring(0) 中的 0 代表什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      相关资源
      最近更新 更多