title: OleDbDataReader.GetString Exception - Specified cast is not valid
body: <p>When my C# (.NET 3.5) application attempts to access a MS Access 2007 database the <code>OleDbReader.GetString()</code> method is throwing an exception:</p>
  
  <blockquote>
    <p>Specified cast is not valid.</p>
  </blockquote>
  
  <p>What am I doing wrong?</p>
  
  <pre><code>OleDbCommand cmd = null;
  OleDbDataReader reader = null;
  String queryString = "SELECT ids.ENUM_H, bas.[BAS BACnet Object Type/Instance] FROM [OV2 BAS] AS bas INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID]";
  
  this.Open();
  
  try
  {
      cmd = new OleDbCommand(queryString, this._conn);
      reader = cmd.ExecuteReader();
  
      if (!reader.HasRows)
      {
          Exception e = new Exception("Read of mapping table returned no results.");
          throw e;
      }
      else
      {
          while (reader.Read())
          {
              Int32 index;
              String classTypeString = null; // = reader.GetString(reader.GetOrdinal(MappingTable.OBJECT_IDENTIFIER_COLUMN_NAME)).Substring(0, 2);
              int it = reader.GetOrdinal(MappingTable.OBJECT_IDENTIFIER_COLUMN_NAME);
              string st = reader.GetString( it );  // &lt;-- **Exception is thrown here** &lt;--
              st = st.Substring(0,2);
              String classIdString = reader.GetString(reader.GetOrdinal(MappingTable.OBJECT_IDENTIFIER_COLUMN_NAME)).Substring(2);
  
              index = Convert.ToInt32(classIdString);
              ClassIds[index, 0] = reader.GetString(reader.GetOrdinal("ENUM_H"));
              ClassIds[index, 1] = classTypeString;
          }
      }
  }
  catch (Exception e)
  {
      Console.WriteLine("ERROR: " + e.Message);
      Console.WriteLine(e.ToString());
      throw e;
  }
  
  this.Close();
  </code></pre>
  
  <p>I know that the <code>Open()</code> and <code>Close()</code> methods work.  Something is wrong with my query, or the way I am processing the results.  Thanks.</p>