2017-03-10 6 views
1

次のコードはIndexOutOfRangeというエラーを表示します。 'Baujahr'はアクセスデータベースの整数列です。ここでコンボボックス(Accessデータベース)のC#文字列にSQL Integerを変換します

cbFahrzeugBJ.Items.Add(reader["Baujahr"].ToString()); 

リーダー:

OleDbDataReader reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    cbFahrzeugBJ.Items.Add(reader["Baujahr"].ToString()); 
} 

そして、この手順の全体のコード:

 try 
     { 
      connection.Open(); 

      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      string query = "SELECT DISTINCT Typ FROM Autos WHERE Hersteller = @FahrzeugHersteller AND Modell = @FahrzeugModell AND Typ = @FahrzeugTyp;"; 
      command.CommandText = query; 
      command.Parameters.Add("@FahrzeugHersteller", SqlDbType.Text); 
      command.Parameters["@FahrzeugHersteller"].Value = cbFahrzeugHersteller.Text; 
      command.Parameters.Add("@FahrzeugModell", SqlDbType.Text); 
      command.Parameters["@FahrzeugModell"].Value = cbFahrzeugModell.Text; 
      command.Parameters.Add("@FahrzeugTyp", SqlDbType.Text); 
      command.Parameters["@FahrzeugTyp"].Value = cbFahrzeugTyp.Text; 
      OleDbDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       cbFahrzeugBJ.Items.Add(reader.GetInt32("Baujahr").ToString()); 
      } 

      connection.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error " + ex); 
     } 
+0

これはcbFahrzeugTyp'はあなたがコードをステップ実行するためにデバッガを使用している '定義されているすべての関連のコードを..示してください..? – MethodMan

+0

コードを変更してwhileループを追加する前に ifブロック内でループコードを実行する場合 – MethodMan

+0

@MethodManは無意味です。行がない場合、Readはfalseを返します。 – stuartd

答えて

2

あなただけの結果セットのTyp列を含むされています。 DataReaderにアクセスするには、ステートメントにBaujahrを含める必要があります。

すなわち:

string query = "SELECT DISTINCT Typ, Baujahr FROM Autos WHERE Hersteller = @FahrzeugHersteller AND Modell = @FahrzeugModell AND Typ = @FahrzeugTyp;"; 
+0

yep - ありがとう、更新されました! –

+0

これは、ありがとう! –

関連する問題