第二个查询无法运行

时间:2017-02-02 19:04:29

标签: mysql database vb.net xampp mysql-insert-id

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

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()

2 个答案:

答案 0 :(得分:1)

  

我已经汇总了一些代码,但请注意这是未经测试的,因为我不再使用MySQL了。

而不是MySqlDataReader我使用了DataTable,因为我发现它们更容易使用,但这是首选。我还为MySqlConnectionMySqlCommand对象实施Using。这样就可以妥善处理物品了,你不必担心这样做。

请注意,我不知道您的数据结构。我猜测了MySqlDbType是什么。你可能不得不改变。我建议将TimeDate保存为DateTime

您可能还想对DBNullsrow(0)上的row(1)进行进一步检查。我已将此留给您查看,可能没有必要,但它总是值得研究,因为它们确实会在出现问题时造成问题。

我不确定您希望如何处理从DataTable语句中带回的SELECT中的多行。所以我正在做的是循环遍历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

答案 1 :(得分:0)

你的字符串值不需要吗?价值观('约翰',

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