第二次查询失败 运行

2nd query fails to run

我是编程新手,我对以下代码有疑问。第二个查询不是 运行。它应该将第一个数据库中的所有数据插入到另一个数据库中。

MySQLConn = New MySqlConnection
MySQLConn.ConnectionString = Connection
Adapter = New MySqlDataAdapter
Dim QRY = "SELECT EquipmentID, Quantity FROM subdbborroweq"
Dim EQID As Integer
Dim QTY As Integer

Dim TimeAndDate As String = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")

Try
    MySQLConn.Open() 
    Command = New MySqlCommand(QRY, MySQLConn)
    Reader = Command.ExecuteReader
    While Reader.Read() 
        EQID = Reader(0)
        QTY = Reader(1)
        Dim QRY1 = "INSERT INTO borrowlogs( `BorrowerName`, `EquipmentID`, `Quantity`, `TimeDate`) VALUES (" &
                    AddBorrower.TextBox1.Text & "," & EQID & ", " & QTY & "," &
                    TimeAndDate & ")"

        Command = New MySqlCommand(QRY1, MySQLConn)
    End While

    MySQLConn.Close()

您的字符串值中不需要 ' 吗?值('John',

$QRY1 = "INSERT INTO borrowlogs( BorrowerName, EquipmentID, Quantity, TimeDate) VALUES ('" & AddBorrower.TextBox1.Text & "','" & EQID...

I have put together some code but please note this is untested as I don't use MySQL anymore.

我使用了 DataTable 而不是 MySqlDataReader,因为我发现它们更容易使用,但这是我的偏好。我还为 MySqlConnectionMySqlCommand 对象实现了 Using。这是为了正确处理对象,您不必担心这样做。

请注意,我不知道你的数据结构。我已经猜到了 MySqlDbType 是什么。你可能需要改变。但是,我建议将 TimeDate 保存为 DateTime.

您可能还想在 row(0)row(1) 上进一步检查 DBNulls。我把这个留给你看,它可能没有必要,但它总是值得研究,因为它们确实会在作物出现时引起问题。

我不确定您希望如何处理从 SELECT 语句返回的 DataTable 中的多行。所以我正在做的是遍历 Rows 集合。如果你不想,你只是想要第一行,你可以改变 SELECT 语句只带回第一行,我相信这是使用 LIMIT 完成的。这意味着您的语句看起来像 SELECT EquipmentID, Quantity FROM subdbborroweq LIMIT 1。您可能想要查看使用 WHERE 的过滤器,并且您可能想要考虑使用 ORDER BY 对数据进行排序。或者删除 For Each row 循环并使用 Integer.TryParse(dt.Rows(0).Item(0).ToString(), EQID)

这是我整理的代码。它可能不是 100%,但希望它能给你一些继续下去的东西:

Dim dt As New DataTable

Using con As New MySqlConnection(Connection),
      cmd As New MySQLCommand("SELECT EquipmentID, Quantity FROM subdbborroweq", con)

    con.open()

    dt.Load(cmd.ExecuteReader)

    If dt.Rows.Count > 0 Then

        cmd.CommandText = "INSERT INTO borrowlogs(BorrowerName, EquipmentID, Quantity, TimeDate) VALUES (@Uname, @EQID, @QTY, @TAD)"

        cmd.Parameters.Add("@Uname", MySqlDbType.VarChar)
        cmd.Parameters.Add("@EQID", MySqlDbType.Int32)
        cmd.Parameters.Add("@QTY", MySqlDbType.Int32)
        cmd.Parameters.Add("@TAD", MySqlDbType.DateTime)

        For Each row As DataRow In dt.Rows

            cmd.Parameters("@Uname").Value = AddBorrower.TextBox1.Text
            cmd.Parameters("@EQID").Value = row.Field(Of Int32)(0)
            cmd.Parameters("@QTY").Value = row.Field(Of Int32)(1)
            cmd.Parameters("@TAD").Value = DateTime.Now

            cmd.ExecuteNonQuery()

        Next

    End If

 End Using