Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
SQLite

Запись нескольких строк через один INSERT

25.10.2016, 10:56. Показов 5121. Ответов 6

Студворк — интернет-сервис помощи студентам
Надо записать в бд около 800 000 строк множественная вставка делается примерно так
C#
1
2
3
4
5
6
7
sqlStr = @"INSERT INTO books(lastname,firstname,midname,genre,title,series,seriesnum,size,filename,ext,up_date,lang)  
VALUES
('@lastname','@firstname','@midname','@genre','@title','@series','@seriesnum','@size','@filename','@ext','@up_date','@lang'),
('@lastname','@firstname','@midname','@genre','@title','@series','@seriesnum','@size','@filename','@ext','@up_date','@lang'),
('@lastname','@firstname','@midname','@genre','@title','@series','@seriesnum','@size','@filename','@ext','@up_date','@lang'),
('@lastname','@firstname','@midname','@genre','@title','@series','@seriesnum','@size','@filename','@ext','@up_date','@lang'),
('@lastname','@firstname','@midname','@genre','@title','@series','@seriesnum','@size','@filename','@ext','@up_date','@lang')";
это не рабочий код, так для примера рабочий не даю из за объема.
Проблема в том что при вставке 80 строк все работает ОК, а больше выдает ошибку - too many SQL variables,слишком много переменных SQL.
Делаю как обычно через параметры
C#
1
cmd.Parameters.AddWithValue(lastname, lineautor);
Может кто встречался и знает в чем проблема?
Мне то надо хотя бы по 3000, а иначе час работы
Буду признателен если кто то поделиться опытом записи в SQLite большого количества информации
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2016, 10:56
Ответы с готовыми решениями:

Вывод нескольких строк через один println
Добрый вечер! Начал в кои-то веки учить Java. Возник вопрос. package com.company; public class Main { public static...

Запись из нескольких файлов Excel в один
Здравствуйте! На работе возникла проблема - есть несколько папок (имена их известны и неизменны), в каждой из них порядка 10-20 файлов...

Запись нескольких файлов изображений в один
Здравствуйте, нужно записать несколько файлов формата JPG в один, например 1.jpg и 2.jpg посредством делфи записать в 3.{Любое Разрешение},...

6
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
25.10.2016, 14:00
link

Добавлено через 1 минуту
link2
1
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
25.10.2016, 17:27  [ТС]
Проблема решилась отказом от использования параметров, и вставкой по 300 шт(хотя вставляет и по 20 000, по 50 000 уходит в даун), однако результат оказался все равно боком около 5 минут. Проблему решило использование конструкции:
C#
1
2
3
4
5
using (SQLiteTransaction transaction = connection.BeginTransaction())
{
     //Здесь вставляем код INSERT 
     transaction.Commit();
}
~20 секунд
спасибо nedel за прицел
0
52 / 52 / 31
Регистрация: 04.03.2014
Сообщений: 430
29.10.2016, 20:10
rams, https://msdn.microsoft.com/en-... 10625.aspx
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
30.10.2016, 10:32
rams, покажите хоть примерно код. 20 секунд на 800 тыс строк это ОЧЕНЬ много.

Или попробуйте так, должно быть быстрее:
C#
1
2
3
4
5
6
7
using (var cmd = new SQLiteCommand("BEGIN", connection_string))
    cmd.ExecuteNonQuery();
 
 //Здесь вставляем код INSERT 
 
using (var cmd = new SQLiteCommand("COMMIT", connection_string))
    cmd.ExecuteNonQuery();
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
03.11.2016, 22:21  [ТС]
lemeserg Создаем таблицу в myTest.db
CREATE TABLE IF NOT EXISTS Person (FirstName TEXT, LastName TEXT);
и вставляем этот код в консольное приложение, путь к базе у вас будет другой
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using (var conn = new SQLiteConnection(@"Data Source=E:\Downloads\Data\myTest.db"))
            {
                conn.Open();
 
                var stopwatch = new Stopwatch();
                stopwatch.Start();
 
                using (var cmd = new SQLiteCommand(conn))
                {
                    using (var transaction = conn.BeginTransaction())
                    {
                        // ooops 10.000.000 вставок -> 31,6076809 seconds with one transaction. на моей машине.
                       // правда 100.000.000 почти 7 минут почему то ?
                        for (var i = 0; i < (int)1.0E+7; i++)
                        {
                            cmd.CommandText = "INSERT INTO Person(FirstName, LastName) VALUES ('John', 'Doe');";
                            cmd.ExecuteNonQuery();
                        }
 
                        transaction.Commit();
                    }
                }
 
                Console.WriteLine("{0} seconds with one transaction.",
                stopwatch.Elapsed.TotalSeconds);
 
                conn.Close();
            }
            ReadLine();
это не рабочий код, так для примера рабочий не даю из за объема.
0
36 / 25 / 12
Регистрация: 08.04.2013
Сообщений: 269
04.11.2016, 09:12
Не там поставили stopwatch.Elapsed.TotalSeconds.
Запись в БД идет очень быстро, а цикл очень долго.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2016, 09:12
Помогаю со студенческими работами здесь

Запись данных из нескольких Edit в один столбец
Всем доброго вечера. Дело в том, что мне нужно из нескольких эдитов, добавить данные в БД Access в один столбец. Я прописывала код...

Запись нескольких строк в БД
помогите пожалуйста с записью нескольких строк в базу данных. Имеется вот такая функция: function ans_add($type) { echo...

Запись в файл нескольких строк
как реализовать запись в файл нескольких строк?

Запись нескольких строк из мемо в бд
Всем привет. Среда разработки c++ builder. C blob полями никогда не работал, подскажите как из мемо поля записать в БД примечание, которое...

Запись в файл, состоящий из нескольких строк
мучаюсь все с той же программкой: Есть тестовый файл вида: INLINE : 233 XLINE : 202 668417.50000 565878.00000 995.87421 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru