已经有一个打开的 DataReader 与此命令关联,必须先关闭
Posted
技术标签:
【中文标题】已经有一个打开的 DataReader 与此命令关联,必须先关闭【英文标题】:There is already an open DataReader associated with this Command which must be closed first 【发布时间】:2012-03-13 15:27:43 【问题描述】:Dim staffid = TextBox1.Text
Dim conn As New SqlConnection
conn.ConnectionString = SqlDataSource1.ConnectionString
Dim command1 As New SqlCommand("SELECT StaffDetails.StaffID, SUM(HolidayRequests.RequestTotalDays) AS Expr1 FROM HolidayRequests INNER JOIN StaffDetails ON HolidayRequests.Username = StaffDetails.UserName WHERE (StaffDetails.StaffID = staffID) GROUP BY StaffDetails.StaffID, HolidayRequests.ApprovalStatus HAVING (HolidayRequests.ApprovalStatus = N'approved')", conn)
Dim command2 As New SqlCommand()
conn.Open()
Dim rdr As SqlDataReader
rdr = command1.ExecuteReader
Dim UpdateQuery As String
While (rdr.Read())
UpdateQuery = "UPDATE HolidayEntitlement set Holiday_Taken = @Expr1"
command2.Parameters.AddWithValue("@Expr1", rdr("Expr1").ToString())
'run update query
command2.CommandText = UpdateQuery
command2.ExecuteNonQuery()
conn.Close()
End While
以下错误: command2.ExecuteNonQuery:连接属性尚未初始化。
【问题讨论】:
为什么要关闭循环中的连接?至少使用using statement 进行连接(它会隐式关闭)。 【参考方案1】:您好,您需要创建第二个命令对象。由于您正在从同一个命令对象中读取,因此您正在尝试执行更新语句。
此外,您正在关闭 while 循环内的连接。之后你必须这样做。
【讨论】:
【参考方案2】:创建第二个命令。换句话说,一个光标用于阅读,另一个用于更新。
【讨论】:
以上是关于已经有一个打开的 DataReader 与此命令关联,必须先关闭的主要内容,如果未能解决你的问题,请参考以下文章
已经有一个打开的 DataReader 与此命令关联,必须先关闭
已经有一个与此命令关联的打开的 DataReader 必须首先关闭 linq [重复]
调用另一个 repo 时出错 - '已经有一个打开的 DataReader 与此命令关联,必须先关闭'
已经有一个打开的 DataReader 与此命令关联,必须先关闭