gpt4 book ai didi

C# 和 NpgsqlDataAdapter 返回单个字符串而不是数据表

转载 作者:行者123 更新时间:2023-11-29 13:38:07 25 4
gpt4 key购买 nike

我有一个 postgresql 数据库和一个 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,Bob Smith,7)”

而且数据是正确的,我希望是 0,然后是 5,然后是一个 bool 值,然后是一些文本等等。但我(显然)更希望它不要作为一个大字符串返回。

任何人都知道为什么如果我在 * 上进行选择,我会按预期得到一个数据表,但如果我在特定列上进行选择,我会得到一个数据表,其中一个条目是我要求的值的字符串?

最佳答案

好的,我明白了,它在 SelectBuilder 函数中。当 select 语句中列出了多个列时,它会将列包装在 () 中,显然这会导致 postgreSQL 或 Npgsql 将其解释为希望以字符串形式返回列表。

关于C# 和 NpgsqlDataAdapter 返回单个字符串而不是数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2495492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com