проблема выполнения нескольких операторов SQLite из одного файла - PullRequest
1 голос
/ 16 ноября 2010

Я писал тонкую оболочку для SQLite, используя P / Invoke, и я хотел бы дать ему возможность читать операторы из файла (для начальной загрузки и т. Д.).В файле я написал следующее:

CREATE TABLE Test
(Col1 INTEGER,
 Col2 TEXT);

INSERT INTO Test (Col1, Col2) VALUES (1, 'test1');
INSERT INTO Test (Col1, Col2) VALUES (2, 'test2');

Этот файл читается с помощью File.ReadAllText (), подготавливается с помощью sqlite3_prepare () и выполняется с помощью sqlite3_step ().Этот процесс успешно подготовил и выполнил однострочные операторы SQLite.

В результате создается таблица, но не выполняется ни один оператор вставки.Что мне нужно сделать, чтобы иметь возможность вставлять несколько операторов в одну строку?

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Разобрался.Оказывается, что sqlite3_step () выполняет только один оператор за раз.В результате вам нужно вызывать sqlite3_step () один раз для каждого оператора в вашей строке.Это немного усложняет задачу, поскольку код возврата SQLITE_DONE возвращает независимо от того, сколько операторов вы выполнили;В настоящее время я делаю точку с запятой, прежде чем выполнить строку.Кроме того, вы можете просто использовать sqlite3_exec (), если не хотите заниматься циклическим бизнесом.

0 голосов
/ 16 ноября 2010

Попробуйте использовать GO после каждого оператора.Это будет что-то вроде этого,

CREATE TABLE Test
(Col1 INTEGER,
 Col2 TEXT);

GO

INSERT INTO Test (Col1, Col2) VALUES (1, 'test1');
INSERT INTO Test (Col1, Col2) VALUES (2, 'test2');

Подробнее о GO здесь

...