如何使用sqlite批量插入超过1000条记录?

时间:2010-08-10 10:07:19

标签: c# vb.net sqlite

我正在尝试在数据库中使用sqlite插入11000条记录,但是虽然程序执行没有错误,但未插入值。

Dim s As New System.Text.StringBuilder("")

sql = "insert into mulRecords1 (symbol, date_p,open_p,high_p,low_p,close_p,vol_p,oi_p) values ('@symbol', '@date_p','@open_p', '@high_p', '@low_p', '@close_p', '@vol_p', '@oi_p')"

cmd = New SQLiteCommand(sql, cnLite)
cmd.CommandText = sql

For i As Integer = 1 To 11000

cmd.Parameters.AddWithValue("@symbol", "test")
cmd.Parameters.AddWithValue("@date_p", "2010-08-20 12:00:00")
cmd.Parameters.AddWithValue("@open_p", 10)
cmd.Parameters.AddWithValue("@high_p", 10)
cmd.Parameters.AddWithValue("@low_p", 10)
cmd.Parameters.AddWithValue("@close_p", 10)
cmd.Parameters.AddWithValue("@vol_p", 10)
cmd.Parameters.AddWithValue("@oi_p", 10)

Next

cmd.ExecuteNonQuery()

我应该如何插入?

6 个答案:

答案 0 :(得分:2)

您的循环只是反复添加参数,然后执行每次循环迭代时执行查询的单个插入,例如。

Dim s As New System.Text.StringBuilder("")

sql = "insert into mulRecords1 (symbol, date_p,open_p,high_p,low_p,close_p,vol_p,oi_p) values ('@symbol', '@date_p','@open_p', '@high_p', '@low_p', '@close_p', '@vol_p', '@oi_p')"



For i As Integer = 1 To 11000

cmd = New SQLiteCommand(sql, cnLite)
cmd.CommandText = sql

cmd.Parameters.AddWithValue("@symbol", "test")
cmd.Parameters.AddWithValue("@date_p", "2010-08-20 12:00:00")
cmd.Parameters.AddWithValue("@open_p", 10)
cmd.Parameters.AddWithValue("@high_p", 10)
cmd.Parameters.AddWithValue("@low_p", 10)
cmd.Parameters.AddWithValue("@close_p", 10)
cmd.Parameters.AddWithValue("@vol_p", 10)
cmd.Parameters.AddWithValue("@oi_p", 10)

cmd.ExecuteNonQuery()

Next

这也假设您实际上想要插入11000个相同的行。

答案 1 :(得分:2)

此时您只需添加参数11000次,然后执行一次命令。

我怀疑您需要将cmd.ExecuteNonQuery()放入循环中(Next之前)。

答案 2 :(得分:1)

有几个问题。

您需要在for循环中调用ExecuteNonQuery。如果要为每次迭代添加新参数值,请确保在每次迭代中清除参数列表。

For i As Integer = 1 To 11000
    cmd.Parameters.Clear()

    // Add parameter values (I removed for clarity)

    cmd.ExecuteNonQuery()
Next

从参数周围删除单引号(')。应该是

sql = "insert into mulRecords1 (symbol, date_p,open_p,high_p,low_p,close_p,vol_p,oi_p) values (@symbol, @date_p,@open_p, @high_p, @low_p, @close_p, @vol_p, @oi_p)"

我为我的代码中的C#注释道歉,无法使用语法高亮来处理vb注释。

答案 3 :(得分:0)

我的猜测是cmd.ExecuteNonQuery()应该在下一个之前。可能现在只插入最后一条记录。

此外,你插入所有相同的行,我没有看到相同行的11K倍,这可能是一个错误?

答案 4 :(得分:0)

每次迭代都执行cmd.ExecuteNonQuery()吗?

答案 5 :(得分:0)

考虑将您的For块更改为

For i As Integer = 1 To 11000

cmd.Parameters.AddWithValue("@symbol", "test")
cmd.Parameters.AddWithValue("@date_p", "2010-08-20 12:00:00")
cmd.Parameters.AddWithValue("@open_p", 10)
cmd.Parameters.AddWithValue("@high_p", 10)
cmd.Parameters.AddWithValue("@low_p", 10)
cmd.Parameters.AddWithValue("@close_p", 10)
cmd.Parameters.AddWithValue("@vol_p", 10)
cmd.Parameters.AddWithValue("@oi_p", 10)

cmd.ExecuteNonQuery()

cmd.Parameters.Clear()

Next