C# 如何使用sqlite对1000多条记录进行大容量插入?

C# 如何使用sqlite对1000多条记录进行大容量插入?,c#,vb.net,sqlite,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'

我试图在数据库中使用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()

如何插入?

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


此外,您插入的是所有相同的行。我看不出将同一行乘以11K有什么意义,这可能是个错误?

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


此外,您正在插入所有相同的行。我看不出将同一行乘以11K有什么意义,这可能是一个错误?

是在每次迭代中执行cmd.ExecuteNonQuery()吗?

是cmd.ExecuteNonQuery()在每次迭代中执行?

您的循环只是一次又一次地添加参数,然后执行单个插入,您需要在每次循环迭代中执行查询,例如

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个相同的行。

您的循环只是反复添加参数,然后执行一次插入,您需要在每次循环迭代中执行查询,例如

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个相同的行。

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


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

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


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

考虑将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

考虑将您的块更改为

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

有几个问题

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

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注释一起使用。

有几个问题

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

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注释进行语法突出显示