2017-06-23 6 views
1

私はPostgreSQL/NpgSQLを使用してc#デスクトップアプリケーションをPostgreSQLデータベースに接続しました。最初のタスクは、正常に動作する私のデータベース内のすべてのテーブル名を返すことでした。この結果によると、テーブルごとにすべての列名を取得したかったのです。しかし、問題は、NpgDatareaderは常にテーブルの最初の列である1つの列を持ち、他の列名を含んでいないことです。ヒントや助けをいただければ幸いです。NpgSQLはテーブルの最初のカラム名を返します

NpgsqlConnection npgConnection2 = new NpgsqlConnection(connectString); 
      npgConnection2.Open(); 
      foreach (var t in _tableNames) 
      { 
       string sqlColumns = "select column_name from information_schema.columns where table_name='"+ t +"';"; 
       NpgsqlCommand npgCommand2 = new NpgsqlCommand(sqlColumns, npgConnection2); 
       NpgsqlDataReader reader2 = npgCommand2.ExecuteReader(); 

       List<string> colTitles = new List<string>(); 
       int i = 0; 
       while (reader2.Read()) 
       { 
        colTitles.Add(reader2[i].ToString()); 
        i++; 
       } 
       _layerObjects.Add(new LayerObject(t.ToString(),colTitles)); 
      } 
      npgConnection2.Close(); 
+1

'i ++;'行を削除すると機能しますか? – mjwills

+0

@mjwillsええ、それは動作します。リーダは、whileループでreader2 [0]という値を返し、iのインデックスをインクリメントしないようです。 –

答えて

1
while (reader2.Read()) 
{ 
    colTitles.Add(reader2[i].ToString()); 
    i++; 
} 

を置き換えてください:

while (reader2.Read()) 
{ 
    colTitles.Add(reader2[0].ToString()); 
} 

iあなたの列インデックスだった - (あなたが複数が、1つの列のみを持っている)がありますが、1つの列のみを持っていました。したがって、常に0にする必要があります。

+0

あなたがコメントで述べたように!! :)ありがとう@mjwills。 –

関連する問題