【问题标题】:problem executing multiple SQLite statements from a single file从单个文件执行多个 SQLite 语句的问题
【发布时间】:2010-11-16 06:29:56
【问题描述】:

我一直在使用 P/Invoke 围绕 SQLite 编写一个精简的包装器,并且我想让它能够从文件中读取语句(用于引导程序等)。我在一个文件中写了以下内容:

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 语句。

发生的情况是创建了表,但没有运行插入语句。为了能够在单个字符串中插入多个语句,我需要做什么?

【问题讨论】:

  • 你知道 System.Data.SQLite sqlite.phxsoftware.com吗?
  • 我是,但我想要编写 P/Invoke 包装器的经验 - 这是我第一个使用它的项目,而且进展顺利。

标签: c#-4.0 sqlite pinvoke


【解决方案1】:

想通了。事实证明 sqlite3_step() 一次只执行一个语句。因此,您需要为字符串中的每个语句调用一次 sqlite3_step()。这有点涉及,因为无论您执行了多少条语句,返回码 SQLITE_DONE 都会返回;在执行字符串之前,我目前正在计算分号。或者,如果您不想处理循环业务,则可以使用 sqlite3_exec()。

【讨论】:

    【解决方案2】:

    尝试在每个语句后使用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的信息

    【讨论】:

    • GO 是 SQL Server。问题是关于 sqlite 的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多