使用相同打开的连接插入50多个查询

时间:2018-09-17 19:17:50

标签: mysql sql vb.net

所以我基本上想要在数据库中插入多个查询而不需要conn.close比conn.open太多,并且还要尝试50次以上..

以下是代码的exp:

a

2 个答案:

答案 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数组。