postgresql db とそれにアクセスするための C# アプリケーションがあります。NpgsqlDataAdapter.Fill コマンドから DataSet に返す値で奇妙なエラーが発生しています。
私はこのコードを持っています:
NpgsqlCommand n = new NpgsqlCommand();
n.Connection = connector; // a class member NpgsqlConnection
DataSet ds = new DataSet();
DataTable dt = new DataTable();
// DBTablesRef are just constants declared for
// the db table names and columns
ArrayList cols = new ArrayList();
cols.Add(DBTablesRef.all); //all is just *
ArrayList idCol = new ArrayList();
idCol.Add(DBTablesRef.revIssID);
ArrayList idVal = new ArrayList();
idVal.Add(idNum); // a function parameter
// Select builder and Where builder are just small
// functions that return an sql statement based
// on the parameters. n is passed to the where
// builder because the builder uses named
// parameters and sets them in the NpgsqlCommand
// passed in
String select = SelectBuilder(DBTablesRef.revTableName, cols) +
WhereBuilder(n,idCol, idVal);
n.CommandText = select;
try
{
NpgsqlDataAdapter da = new NpgsqlDataAdapter(n);
ds.Reset();
// filling DataSet with result from NpgsqlDataAdapter
da.Fill(ds);
// C# DataSet takes multiple tables, but only the first is used here
dt = ds.Tables[0];
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
したがって、私の問題は次のとおりです。上記のコードは、私が望んでいるように完全に機能します。ただし、すべての選択 (*) を実行する代わりに、クエリから返される個々の列に名前を付けようとすると、要求した情報が取得されますが、データ テーブル内の個別のエントリに分割されるのではなく、文字列が取得されます次のようなデータ テーブルの最初のインデックスで:
"(0,5,false,ボブ・スミス,7)"
そして、データは正しいです。0、5、ブール値、テキストなどが期待されますが、(明らかに) 1 つの大きな文字列として返されないことをお勧めします。
* を選択すると期待どおりにデータテーブルが得られるのに、特定の列を選択すると、求めている値の文字列である 1 つのエントリを含むデータテーブルが得られる理由は誰でも知っていますか?