gpt4 book ai didi

C# - DataReader 无法返回多个结果集

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:25 26 4
gpt4 key购买 nike

我想做的与 OP 在此处提出的要求类似:

Multiples Table in DataReader

我试图将一个或多个 SQL 查询的结果存储到单独的数据表中。上述问题的方法的问题在于它仅适用于每个结果集中的离散值。最好使用 DataTables Load(reader) 方法将每个结果集存储在单个语句中,而不是必须遍历 DataReader 的所有列。

在下面的代码中,我有两个 SQL 查询(尽管这应该适用于任意数量的查询),我尝试将其结果存储在一个临时数据表中,然后存储到一个数据表列表中。我的代码的问题是它只返回第一个查询的结果集,添加后续查询会抛出 Reader is closed exception

    using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand
("SELECT TOP 10 Column1, Column2 FROM Table1; SELECT TOP 10 Column1, Column2 FROM Table2", connection))
{
connection.Open();

using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
tempTable.Reset();
tempTable.Load(reader);
dataTables.Add(tempTable);
}

if (reader.NextResult())
{
while (reader.Read())
{
tempTable.Reset();
tempTable.Load(reader);
dataTables.Add(tempTable);
}
}
}
}
}

我为此苦苦挣扎了几个小时。我不确定 DataTable/DataReader 是否只是针对我的用例设计不当,或者我是否缺少一些基本的东西。

最佳答案

DataReader 不适合我的需要,使用它会导致代码冗长,所以我按照 Daniel Kelly 的建议使用了 DataAdapter。读取多个结果集的代码现在比较简单:

    using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand
("SELECT TOP 10 Name, [Description] FROM Business; SELECT TOP 10 ConnectionId FROM Connection;SELECT TOP 10 Name FROM Business", connection))
{
connection.Open();

SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet set = new DataSet();
adapter.SelectCommand = command;

//Note here, that the adapter will create multiple tables for each result set
adapter.Fill(set);

foreach (DataTable t in set.Tables)
{
dataTables.Add(t);
}

dataTables.Add(tempTable);
}
}

阅读您的评论后,我发现我对 reader.Read() 和 NextResult() 的理解存在缺陷。此外,每次调用 DataReader 的加载方法时,读取器的连接都会关闭。

谢谢大家的意见和建议。我不会接受我自己的回答,因为那会很自负。

关于C# - DataReader 无法返回多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24428628/

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