2010-08-10 3 views
0

Я пытаюсь вставить 11000 записей, используя sqlite в базе данных, но значения arent вставлены, хотя программа выполняется без ошибок.Как сделать объемную вставку для более 1000 записей с использованием 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() 

Как мне вставить?

ответ

0

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

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

0

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

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 одинаковых строк.

2

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

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

0

следует изменить для блока

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 
1

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

Вы должны вызвать 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 комментарий.

Смежные вопросы