所以我基本上想要在数据库中插入多个查询而不需要conn.close比conn.open太多,并且还要尝试50次以上..
以下是代码的exp:
a
答案 0 :(得分:1)
如果不解决其他问题,例如参数化/准备好的查询,则最简单的解决方法应该是...
Dim COMMAND As MySqlCommand
Dim conn As MySqlConnection
Dim Item1 As String = "INSERT INTO item_template (entry, name, display) VALUES ('1234', 'Testing', '654');"
Dim Item3 As String = "UPDATE Item_template SET entry = '123' where name like 'test32111';"
Dim Item2 As String = "INSERT INTO item_template (entry, name, display) VALUES ('123467', 'Testing332', '65478');"
Try
conn.Open()
COMMAND = New MySqlCommand("", conn)
COMMAND.CommandText = Item1
COMMAND.ExecuteNonQuery
COMMAND.CommandText = Item2
COMMAND.ExecuteNonQuery
COMMAND.CommandText = Item3
COMMAND.ExecuteNonQuery
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
尽管我的VB有点生锈,所以请注意拼写错误((我尝试多次添加;
)
答案 1 :(得分:0)
您可以进行一些优化。您应该将一次性资源嵌入Using-Statement中。 Using语句最后自动关闭并处置资源。特别是连接将自动关闭。即使由于异常或Return语句终止该方法而过早地离开了using-block,它也会这样做。
在处理批处理时保持连接打开。
干:Don't Repeat Yourself。尝试避免使用复制粘贴进行代码重复。在下面的示例中,我创建了一个SQL文本数组,该数组可以循环处理。
诸如INSERT,UPDATE,DELETE之类的SQL命令不会返回结果集。对他们使用ExecuteNonQuery
而不是ExecuteReader
。
可以通过为命令分配新的命令文本来恢复该命令。
Dim sqlTexts = {
"INSERT INTO item_template (entry, name, display) VALUES ('1234', 'Testing', '654';",
"UPDATE Item_template SET entry = '123' where name like 'test32111';",
"INSERT INTO item_template (entry, name, display) VALUES ('12367', 'Testing332', '65478';"
}
Using _
conn As New MySqlConnection(connectionString),
command As New MySqlCommand With {
.CommandType = CommandType.Text,
.Connection = conn
}
conn.Open()
For Each sql As String In sqlTexts
Try
command.CommandText = sql
command.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Next
End Using
请注意,使用状态语句包含command
以及我们正在使用VB的Implicit Line Continuation功能来初始化sqlTexts
数组。