Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用同一打开的连接插入50多个查询_Mysql_Sql_Vb.net - Fatal编程技术网

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

Mysql 使用同一打开的连接插入50多个查询,mysql,sql,vb.net,Mysql,Sql,Vb.net,因此,我基本上想要的是在不需要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) VALU

因此,我基本上想要的是在不需要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

如果不解决其他问题,如参数化/准备好的查询,最简单的解决方法应该是

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有点生疏,所以要小心打字错误(我多次尝试添加

您可以进行一些优化。您应该将可支配资源嵌入到一个应用程序中。Using语句最后自动关闭并处置资源。特别是连接将自动关闭。即使由于异常或Return语句终止该方法而过早地离开Using块,它也会这样做

处理批处理时保持连接打开

干:。尽量避免使用复制粘贴进行代码重复。在下面的示例中,我创建了一个可以在循环中处理的SQL文本数组

INSERT、UPDATE、DELETE等SQL命令不会返回结果集。使用而不是为他们

可以通过为该命令指定新的命令文本来恢复该命令

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语句包括
命令
,我们正在使用VB的功能初始化
sqlTexts
数组。

您可以使用过程代替标题插入多行:您是否尝试将sql命令堆叠在同一字符串中并执行连续字符串?或者,将所有内容保存到.sql文件中并运行该文件。只需打开连接一次,运行所有希望运行的命令,然后在结束时关闭连接?啊,我想我看到了您(最初)的问题;你需要关闭阅读器。。。或者只使用command的ExecuteOnQuery方法。非常感谢,实际上只需将dim读取器作为mysqldatareader:D删除,因为它不需要:)非常感谢!我不能接受两个答案,或者这是可能的,因为你的答案很好,而另一个也很好!谢谢;)这取决于你决定哪个答案对你最有帮助。我会选择urs,因为有600多个SQL行:D不同的hehe做其他方法更容易理解,但你的方法真的很棒:)是否可以添加进度条,让人们知道这需要很长时间:DSee: