第二次查询失败 运行
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
,因为我发现它们更容易使用,但这是我的偏好。我还为 MySqlConnection
和 MySqlCommand
对象实现了 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
我是编程新手,我对以下代码有疑问。第二个查询不是 运行。它应该将第一个数据库中的所有数据插入到另一个数据库中。
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
,因为我发现它们更容易使用,但这是我的偏好。我还为 MySqlConnection
和 MySqlCommand
对象实现了 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