如何使用SQLitePCL导入文件

时间:2016-02-04 19:36:45

标签: c# sqlite

我使用SQLitePCL创建数据库,我想读取csv文件。但是,当我转到Prepare任何SQLite 'dot-command'(例如

)时,我会遇到异常

.import file.csv table

有没有办法用SQLitePCL导入CSV文件?

1 个答案:

答案 0 :(得分:1)

更新

我对现有的答案不满意,并希望使用SQLite的PCL进行简单的便携式导入。对于我的大多数代码,我使用了SQLitePCL.Pretty并试图通过INSERTPrepareStatement方法一次导入500个记录的批次 - 这非常慢。幸运的是,由于SQLitePCL.Pretty依赖于SQLitePCL.raw,我能够模仿用于导入的SQLite shell.c命令,这非常快(添加自己的错误处理)。

var _dbname = "my.db";
var filename = "myfile.csv";
var hasHeaderRow = true;
var tablename = "MyTable";
sqlite3 db;
raw.sqlite3_open(_dbname, out db);
raw.sqlite3_exec(db, "BEGIN");
sqlite3_stmt stmt;

using (StreamReader file = new StreamReader(filename))
{
    string line;
    if (hasHeaderRow)
        file.ReadLine();
    while ((line = file.ReadLine()) != null)
    {
        string sql = "INSERT INTO " + tablename + " VALUES (" + String.Join(@",", SanitizeSql(line.Split(delimiter))) + ");";
        raw.sqlite3_prepare_v2(db, sql, out stmt);
        raw.sqlite3_step(stmt);
        var rc = raw.sqlite3_reset(stmt);
        raw.sqlite3_finalize(stmt);
        stmt.Dispose();
    }
}
raw.sqlite3_exec(db, "COMMIT");
db.Dispose();

旧答案

"dot-commands"只能通过sqlite命令行shell获得,因此不能通过任何sqlite DLL使用。

可以导入CSV - 只需搜索其他sqlite-C#CSV导入问题。您将获得有关使用FileHelpers,StreamReader,OleDbConnection的答案...例如,请参阅this answerthis example on CodeProject

您也可以通过C#Process调用sqlite二进制文件,并将"dot-commands"作为RedirectionInputs(或.sql文件)传入。