我使用SQLitePCL创建数据库,我想读取csv文件。但是,当我转到Prepare
任何SQLite 'dot-command'
(例如
.import file.csv table
有没有办法用SQLitePCL导入CSV文件?
答案 0 :(得分:1)
我对现有的答案不满意,并希望使用SQLite的PCL进行简单的便携式导入。对于我的大多数代码,我使用了SQLitePCL.Pretty并试图通过INSERT
和PrepareStatement
方法一次导入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 answer或this example on CodeProject。
您也可以通过C#Process
调用sqlite二进制文件,并将"dot-commands"
作为RedirectionInputs(或.sql文件)传入。