我是编程新手,我遇到以下代码问题。第二个查询未运行。它应该将第一个数据库中的所有数据插入到另一个数据库中。
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()
答案 0 :(得分:1)
我已经汇总了一些代码,但请注意这是未经测试的,因为我不再使用MySQL了。
而不是MySqlDataReader
我使用了DataTable
,因为我发现它们更容易使用,但这是首选。我还为MySqlConnection
和MySqlCommand
对象实施Using。这样就可以妥善处理物品了,你不必担心这样做。
请注意,我不知道您的数据结构。我猜测了MySqlDbType
是什么。你可能不得不改变。我建议将TimeDate
保存为DateTime
。
您可能还想对DBNulls
和row(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...