gpt4 book ai didi

c# - 阅读器关闭时调用 Read 的尝试无效。 ExecuteReader获取多表结果

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

我正在尝试使用 SqlDataReader 而不是填充数据集来返回 List(Of DataTable)。在正确检索 4 个表后,我收到“阅读器关闭时调用 Read 的无效尝试”错误。这是我正在使用的功能

Private Function ExecuteDS(ByVal SPName As String, ByVal ParamList As List(Of System.Data.SqlClient.SqlParameter)) As List(Of System.Data.DataTable)
Dim ds As New List(Of System.Data.DataTable)
Dim dbConStr As Database
dbConStr = New Database()
Using con As New System.Data.SqlClient.SqlConnection(dbConStr.ReturnString)
Dim cmd As New System.Data.SqlClient.SqlCommand(CStr(SPName), con)
cmd.CommandType = System.Data.CommandType.StoredProcedure
cmd.CommandTimeout = 30
For Each p As System.Data.SqlClient.SqlParameter In ParamList
cmd.Parameters.Add(p)
Next

con.Open()
Using dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader
If dr.HasRows Then
Do While dr.Read()
Dim dt As New System.Data.DataTable
dt.Load(dr)
ds.Add(dt)
Loop
End If
End Using

con.Close()
End Using
Return ds
End Function

错误发生在dr.Read()。它应该返回 4 个表,但在获得第 4 个表后,它仍然会尝试执行 dr.Read() 并抛出错误,而不是正确地退出循环。任何见解,我将不胜感激,谢谢。

编辑:还尝试使用 dr.NextResult() 进行此操作,但仍然在同一行出现错误。

            Using dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader
Do While dr.HasRows
Do While dr.Read()
Dim dt As New System.Data.DataTable
dt.Load(dr)
ds.Add(dt)
Loop
dr.NextResult()
Loop
End Using

编辑 2:在 IF 语句中尝试使用 dr.HasRows,仍然在 dr.Read() 出现错误...

            Using dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader
Do
If dr.HasRows Then
While dr.Read()
Dim dt As New System.Data.DataTable
dt.Load(dr)
ds.Add(dt)
End While
End If
Loop While dr.NextResult()
End Using

最佳答案

如果没有 NextResut,则无需测试 HasRows

在 C# 中
最后一个 While 会导致它立即离开。

using (IDataReader reader = ...) 
{
do
{
if (reader.HasRows())
{
while (reader.Read())
{
....
}
}
} while (reader.NextResult())
}

关于c# - 阅读器关闭时调用 Read 的尝试无效。 ExecuteReader获取多表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965294/

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