私は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();
'i ++;'行を削除すると機能しますか? – mjwills
@mjwillsええ、それは動作します。リーダは、whileループでreader2 [0]という値を返し、iのインデックスをインクリメントしないようです。 –