从单个文件执行多个SQLite语句的问题

时间:2010-11-16 06:29:57

标签: c#-4.0 sqlite pinvoke

我一直在使用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语句。为了能够在单个字符串中插入多个语句,我需要做什么?

2 个答案:

答案 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

的更多信息