Как сделать массовую вставку для более 1000 записей с использованием sqlite? - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь вставить 11000 записей с использованием sqlite в базу данных, но значения не вставляются, хотя программа выполняется без ошибок.

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 ]

2 голосов
/ 10 августа 2010

В данный момент вы просто добавляете параметры 11000 раз, а затем выполняете команду один раз.

Я подозреваю, что вам нужно поместить cmd.ExecuteNonQuery() в ваш цикл (перед Next).

2 голосов
/ 10 августа 2010

Ваш цикл просто добавляет параметры снова и снова, а затем выполняет одну вставку, необходимую для выполнения запроса при каждой итерации цикла, например,

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 голос
/ 10 августа 2010

Есть несколько проблем.

Вам необходимо вызвать ExecuteNonQuery в цикле for.Обязательно очищайте список параметров в каждой итерации, если вы добавляете новые значения параметров для каждой итерации.

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.

0 голосов
/ 10 августа 2010

рассмотрите возможность изменения блока 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
0 голосов
/ 10 августа 2010

cmd.ExecuteNonQuery () выполняется в каждой итерации?

0 голосов
/ 10 августа 2010

Я предполагаю, что cmd.ExecuteNonQuery () должен быть перед следующим.Вероятно, сейчас вставлена ​​только последняя запись.

Кроме того, вы вставляете все одинаковые строки, и я не вижу смысла в том, чтобы 11K раз повторять одну и ту же строку, возможно, это ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...