gpt4 book ai didi

c# - DataTable.Load(FbDataReader) 不会将所有内容加载到 DataTable

转载 作者:太空狗 更新时间:2023-10-29 20:17:01 25 4
gpt4 key购买 nike

这里有一个密切相关的问题:.NET DataTable skips rows on Load(DataReader)

我有一个返回 169 个结果的 SQL 查询。结果如下所示:

CustomerID Customer Name TerminalID Creation Date
1 First Customer 12345 2010-07-07
1 First Customer 12346 2010-07-07
1 First Customer 12347 2010-07-07
2 Second Customer 23456 2011-04-18

这个结果是正确的。

我在 C# 程序中输入查询并像这样执行它:

public DataTable getDataTableFromSql(FbCommand command)
{
// Create a new datatable
DataTable result = new DataTable();

// Set up the connection
using (FbConnection con = new FbConnection(this.connectionString))
{
// Open the connection
con.Open();

// Set up the select command
FbCommand sqlCmd = command;
// Add the connection to it
sqlCmd.Connection = con;

try
{
// Get the results
using (FbDataReader sqlReader = sqlCmd.ExecuteReader())
{
// Load the results into the table
result.Load(sqlReader);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}

// Return the table
return result;
}

这段代码已经过测试,它适用于许多不同的 SQL 查询。但对于上述查询,DataTable 仅包含 39 个结果,如下所示:

CustomerID Customer Name TerminalID Creation Date
1 First Customer 12347 2010-07-07
2 Second Customer 23456 2011-04-18

我稍微修改了一下代码,这是我目前的发现:FbDataReader 正确地从数据库中获取结果。如果我只查询 TerminalID,我最终会在 DataTable 中得到 169 个结果。如果我查询 CustomerID,我会收到 39 个结果。

结论 result.Load(sqlReader) 行将 CustomerID 的结果分组并丢弃所有其他结果,无论它们是否可以分组也可以不分组。

为什么会这样?如何将查询结果加载到 DataTable 中,而不会因不合逻辑的分组而“丢失”任何行?为什么 DataTable 首先将结果“分组”?

注意:我还尝试了可用于 DataTables 的所有三个 LoadOptions,所有结果都相同:只有 39 个结果加载到 DataTable .

最佳答案

DataTable.Load 方法需要基础数据中的主键列(即来自 DataReader)。看起来您的过程没有任何主键列,或者如果您有主键列,请在 sql 语句中使用 order by 以便 DataTable 能够接受它作为主键列.

这是 DataTable.Load 的一个非常古老的问题,没有很好的记录。一般来说,SQLDataAdapterDataTable 搭配使用效果很好。

在您的情况下,我认为一旦 Load 找到重复项,它就会停止加载数据。我没有在任何地方记录这个,但看起来像这个问题。

关于c# - DataTable.Load(FbDataReader) 不会将所有内容加载到 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22663734/

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