sqlite vb.net多次插入来自datatable的一个命令

时间:2012-06-02 16:56:35

标签: vb.net sqlite datatable

我有这段代码,但它只能插入54条记录中的7条记录。 我确信数据表中的记录很好。

Dim dt As DataTable
Dim sc As SQLiteCommand
Dim Script As String = Nothing
Dim Script2 As String = Nothing
Dim Script3 As String = Nothing
Script = "insert into paperdate(dtime,papernum,paperstat,user) select " & "'" & dt.Rows(0)(0) & "'" & " as " & "dtime" & "," & dt.Rows(0)(1) & " as " & "papernum" & "," & "'" & dt.Rows(0)(2) & "'" & " as " & "paperstat" & "," & "'" & dt.Rows(0)(3) & "'" & " as " & "user"
For i As Integer = 1 To dt.Rows.Count - 1
Script2 = " union select " & "'" & dt.Rows(i)(0) & "'" & "," & dt.Rows(i)(1) & "," & "'" & dt.Rows(i)(2) & "'" & "," & "'" & dt.Rows(i)(3) & "'"
Script3 = Script3 & Script2
Next
sc = New SQLiteCommand(Script & Script3, mycon)
sc.ExecuteNonQuery()
sc.Dispose()

我希望有人有答案, 感谢

1 个答案:

答案 0 :(得分:1)

您可能在第二个选择中有重复记录。如果是这种情况,则解决方案是使用UNION ALL而不是UNION

  

使用UNION ALL运算符创建的复合SELECT将返回所有   从UNION ALL运算符的SELECT到左边的所有行   从SELECT到右边的行。 UNION运算符工作   与UNION ALL相同,只是删除了重复的行   最终结果集。

参考:http://www.sqlite.org/lang_select.html

如果不是这样,那么您可能希望跟踪SQL,并直接在sqlite客户端中运行SELECT部分。

<强>更新

根据您的评论,以下是您对代码所做的更改:

Script2 = " union select " & "'" & dt.Rows(i)(0) & "'" & "," & dt.Rows(i)(1) & "," & "'" & dt.Rows(i)(2) & "'" & "," & "'" & dt.Rows(i)(3) & "'"

成为

Script2 = " union all select " & "'" & dt.Rows(i)(0) & "'" & "," & dt.Rows(i)(1) & "," & "'" & dt.Rows(i)(2) & "'" & "," & "'" & dt.Rows(i)(3) & "'"