热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLite大批量插入性能优化

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();
}
}
}
}

 


推荐阅读
author-avatar
蓬从蓉Tahirah
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有