作者:蓬从蓉Tahirah | 来源:互联网 | 2023-08-31 19:30
SQLite作为轻量级,零安装的数据库,用在小型桌面应用程序上特别合适。网上搜了一下,貌似在程序中无法直接从格式化文本或CSV文件导入SQLite,只能逐条insert,这
SQLite作为轻量级,零安装的数据库,用在小型桌面应用程序上特别合适。
网上搜了一下,貌似在程序中无法直接从格式化文本或CSV文件导入SQLite,只能逐条insert,这一点比起SQL SERVER就差了一些。
好在SQLite经过优化后大批量插入速度也还可以,方法就是事务+参数化,直接上代码。
string strcOnn= System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString;
using (SQLiteConnection con = new SQLiteConnection(strconn))
{
con.Open();
using (SQLiteTransaction trans = con.BeginTransaction())
{
using (SQLiteCommand cmd = new SQLiteCommand(con))
{
cmd.Transaction = trans;
try
{
using (FileStream fs = File.OpenRead("*.txt"))
{
using (StreamReader sr = new StreamReader(fs))
{
string sline;
string []arr;
string str;
rCount = 0;
while(!sr.EndOfStream)
{
sline = sr.ReadLine();
arr = sline.Split(',');
str = "INSERT INTO XXXTABLE (A,B,C,D,E,F,G,H,I,J) VALUES(@A,@B,@C,@D,@E,@F,@G,@H,@I,@J)";
cmd.CommandText = str;
cmd.Parameters.AddWithValue("@A", arr[0]);
cmd.Parameters.AddWithValue("@B", arr[1]);
cmd.Parameters.AddWithValue("@C", arr[2]);
cmd.Parameters.AddWithValue("@D", arr[3]);
cmd.Parameters.AddWithValue("@E", arr[4]);
cmd.Parameters.AddWithValue("@F", arr[5]);
cmd.Parameters.AddWithValue("@G", arr[6]);
cmd.Parameters.AddWithValue("@H", arr[7]);
cmd.Parameters.AddWithValue("@I", arr[8]);
cmd.Parameters.AddWithValue("@J", arr[9]);
cmd.ExecuteNonQuery();
rCount = rCount + 1;
}
}
}
trans.Commit();
//5,清空txt
System.IO.File.WriteAllText(path + "*.txt", "", System.Text.Encoding.Default);
}
catch(Exception ex)
{
rCount = 0;
trans.Rollback();
}
}
}
}