我一直在使用P / Invoke编写一个关于SQLite的瘦包装器,我想让它能够从文件中读取语句(用于bootstraps等)。我在文件中写了以下内容:
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语句。
会发生什么是创建表,但是没有运行insert语句。为了能够在单个字符串中插入多个语句,我需要做什么?
答案 0 :(得分:1)
想出来。事实证明,sqlite3_step()一次只能通过一个语句。因此,您需要为字符串中的每个语句调用一次sqlite3_step()。这有点牵扯,因为无论你执行了多少语句,返回码SQLITE_DONE都会返回;我在执行字符串之前正在进行分号计数。或者,如果您不想处理循环业务,可以使用sqlite3_exec()。
答案 1 :(得分:0)
在每个语句后尝试使用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 here
的更多信息