INSERT 50个以上查询使用相同的打开连接

问题描述 投票:0回答:2

所以我基本上想要的是向我的数据库插入多个查询而不需要conn.close而不是conn.open太多次并且尝试超过50次..

这是代码的exp:

    Dim COMMAND As MySqlCommand
    Dim reader As MySqlDataReader
    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(Item1, conn)
        reader = COMMAND.ExecuteReader
        conn.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    Try
        conn.Open()
        COMMAND = New MySqlCommand(Item3, conn)
        reader = COMMAND.ExecuteReader
        conn.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    Try
        conn.Open()
        COMMAND = New MySqlCommand(Item2, conn)
        reader = COMMAND.ExecuteReader
        conn.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
mysql sql vb.net
2个回答
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

请注意,Using-statement包含command以及我们使用VB的Implicit Line Continuation功能来初始化sqlTexts数组。


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有点生疏,所以要小心错字级别的错误(我试图不止一次添加;

© www.soinside.com 2019 - 2024. All rights reserved.