我正在构建一个使用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.
但我正在使用不同的数据阅读器。
答案 0 :(得分:3)
我建议不要嵌套数据库连接。当然,为了这个目的,我确定你没有得到如此多的结果,以至于你超过了连接限制,但这通常是不好的做法。
最好返回要删除的表名列表。然后,在处理完初始连接(使用这些表名称)后,可以遍历表名并创建drop table命令。