执行SQL命令作为SQL命令的嵌套循环
问题描述:
我正在构建一个函数,该函数使用SQL查询来获取要删除的表的列表。然后我想遍历每个结果行并执行命令。执行SQL命令作为SQL命令的嵌套循环
Public Shared Sub DropTables(DbConnectionString As String)
Dim sqlConnection As New SqlConnection(DbConnectionString)
Dim cmd As New SqlCommand
Dim reader As SqlDataReader
cmd.CommandText = "SELECT 'DROP TABLE ' + name + ';' from sysobjects where name like 'SM_%' and type='U';"
cmd.CommandType = CommandType.Text
cmd.Connection = sqlConnection
sqlConnection.Open()
reader = cmd.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
Using nonQuery As SqlCommand = sqlConnection.CreateCommand()
nonQuery.CommandText = reader.GetString(0)
nonQuery.ExecuteNonQuery()
End Using
Loop
Else
Console.WriteLine("No rows found.")
End If
sqlConnection.Close()
End Sub
我的问题是,我在这条线得到一个这样的错误:nonQuery.ExecuteNonQuery()
There is already an open DataReader associated with this Command which must be closed first.
但是我使用的是不同的数据读取器。
答
我会建议不要嵌套数据库连接。当然,为了这个目的,我相信你没有收到太多的结果,你会超出连接限制,但这通常是不好的做法。
你最好返回一个你想删除的表名列表。然后,在处理初始连接(获得这些表名称)后,可以遍历表名并创建drop table命令。
你确定该消息不是'已经有一个开放的DataReader与这个CONNECTION'关联了吗? – Plutonix