【问题标题】:insert multiple data mysql using for loop使用for循环插入多个数据mysql
【发布时间】:2013-10-06 10:27:11
【问题描述】:

这是场景,我有一个选择查询,然后所有获取的数据都必须插入到另一个表中。这就是我想出来的,我不知道 for 循环是否有任何作用。

如果我要删除 for 循环。 例子: 获取的数据是 id1, id2, id3 我数据库中插入的数据是 id1, id1, id1 而不是 id1, id2, id3

sql = "SELECT * FROM dummy_violate WHERE res_month <> @month Or res_year <> @year"
    cmd = New MySqlCommand(sql, con)
    cmd.Parameters.AddWithValue("@month", DateTime.Now.ToString("MMMM"))
    cmd.Parameters.AddWithValue("@year", DateTime.Now.ToString("yyyy"))
    dr = cmd.ExecuteReader
    While dr.Read
        id += dr(0)
        count += 1
    End While
    dr.Close()
    If count > 0 Then

        For i As Integer = 1 To count
            sql2 = "INSERT INTO dummy_violate(res_id, res_month, res_year, is_paid)VALUES(@id,@month,@year,@paid)"
            cmd = New MySqlCommand(sql2, con)
            cmd.Parameters.AddWithValue("@id", id)
            cmd.Parameters.AddWithValue("@month", DateTime.Now.ToString("MMMM"))
            cmd.Parameters.AddWithValue("@year", DateTime.Now.ToString("yyyy"))
            cmd.Parameters.AddWithValue("@paid", 0)
            cmd.ExecuteNonQuery()
        Next
    ElseIf count = 0 Then

        MsgBox("Wrong Query")

    End If

【问题讨论】:

  • 我需要重命名问题中的标题和其他一些内容,抱歉。
  • '另一张桌子' ?它看起来是同一张桌子。
  • 你的意思是什么?我的问题不是表格.. 问题是插入多个数据
  • 如果 ID 是表的主键,则不能插入具有相同 ID 的多条记录。 ID 是表 dummy_violate 的主键吗?
  • 不,我的 dummy_violate 不包含主键..

标签: mysql vb.net winforms


【解决方案1】:

我真的不明白您要做什么以及为什么,您似乎只是将表中已经存在的记录与具有相同数据但 is_paid 标志设置为零的新记录重复。如果是这样,请尝试以这种方式更改您的代码:

sql = "SELECT res_id FROM dummy_violate WHERE res_month <> @month Or res_year <> @year"
cmd = New MySqlCommand(sql, con)
cmd.Parameters.AddWithValue("@month", DateTime.Now.ToString("MMMM"))
cmd.Parameters.AddWithValue("@year", DateTime.Now.ToString("yyyy"))
Dim da = new MySqlDataAdapter(cmd)
Dim dt = new DataTable()
da.Fill(dt)

' if we have records to duplicate we have Rows.Count > 0
If dt.Rows.Count > 0 Then
   sql2 = "INSERT INTO dummy_violate(res_id, res_month, res_year, is_paid) " & _ 
          "VALUES(@id,@month,@year,@paid)"
    cmd = New MySqlCommand(sql2, con)

    ' Add all the parameters before entering the loop. Just @id changes for every loop,
    ' so we set it with a dummy value outside the loop and we change it when looping over
    ' the result table.....
    cmd.Parameters.AddWithValue("@id", 0) 
    cmd.Parameters.AddWithValue("@month", DateTime.Now.ToString("MMMM"))
    cmd.Parameters.AddWithValue("@year", DateTime.Now.ToString("yyyy"))
    cmd.Parameters.AddWithValue("@paid", 0)

    ' execute the insert for all the rows count 
    ' rows array starts at zero so loop to count -1
    For i As Integer = 0 To dt.Rows.Count - 1
        cmd.Parameters("@id").Value = dt.Rows(i)("res_id")
        cmd.ExecuteNonQuery()
    Next
ElseIf count = 0 Then
    MsgBox("Wrong Query")
End If

请记住,如果 res_id 是主键,那么您不能将具有相同 res_id 的记录插入两次。此外,如果 res_id 是一个 auto_number 列(又名 IDENTITY),那么您不能显式设置它的值

【讨论】:

  • 谢谢你.. 代码工作.. 但怎么能做到如果数据存在它不会再插入..
  • 这要复杂得多。如果用 res_id、res_month 和 res_year 设置主键,插入会失败,需要捕获异常。相反,如果您想在插入之前检查,则需要另一个查询来检查三个值的存在以避免重复。第二种方法可能是最好的但更复杂。请尝试添加一个新问题,以便其他人可以看到并提供帮助
猜你喜欢
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2023-04-11
  • 2023-04-03
  • 1970-01-01
  • 2019-08-08
  • 2021-07-07
  • 2012-04-23
相关资源
最近更新 更多