引用sqlite数据库
winform要使用sqlite数据库,必须引用System.Data.SQLite.dll文件,添加方法:右键工程,添加,引用,浏览,选择System.Data.SQLite.dll文件,然后在代码里面便可以使用以下命名空间:
using System.Data.SQLite;
using System.Data.Sql;
using System.Data.SqlClient;
创建打开数据库
使用sqlite创建一个本地数据库,需要首选声明一个数据库连接对象,用于记录当前程序与数据库的连接,用于执行SQL语句。
SQLiteConnection db_conn = null;
使用SQLiteConnection.CreateFile函数创建一个指定名称的数据库,如果该数据库已经存在,则会删除原有数据库,创建一个新的数据库。可以使用SQLiteConnectionStringBuilder 对象为数据库设置密码,也可以不设置。
使用Open函数打开sqlite指定数据库,在调用Open函数之前,必须保证数据库文件存在。
/// <summary>
/// 创建数据库,删除之后再创建
/// </summary>
/// <param name="database_file_name"></param>
/// <param name="paasword"></param>
public void Create(string database_file_name,string paasword = "")
SQLiteConnection.CreateFile(database_file_name);////创建数据库文件
db_conn = new SQLiteConnection(database_file_name);
SQLiteConnectionStringBuilder sql_builder = new SQLiteConnectionStringBuilder();
sql_builder.DataSource = database_file_name;
sql_builder.Password = paasword;
db_conn.ConnectionString = sql_builder.ToString();
db_conn.Open();
}
/// <summary>
/// 打开数据库,数据库必须存在
/// </summary>
/// <param name="database_file_name"></param>
/// <param name="paasword"></param>
public void Open(string database_file_name, string paasword = "")
{
db_conn = new SQLiteConnection(database_file_name);
sql_builder = new SQLiteConnectionStringBuilder();
sql_builder.DataSource = database_file_name;
sql_builder.Password = paasword;
db_conn.ConnectionString = sql_builder.ToString();
db_conn.Open();
}
执行SQL语句
使用SQLiteCommand对象来指定要执行的SQL语句的具体内容,指定执行的数据库等信息,使用ExecuteNonQuery函数执行SQL命令,具体的执行SQL语句函数如下:
/// <summary>
/// 执行sql命令
/// </summary>
/// <param name="sql"></param>
public void DbExecuteSqlCommand(string sql)
{
SQLiteCommand sql_cmd = new SQLiteCommand();
sql_cmd.CommandText = sql;
sql_cmd.Connection = db_conn;
sql_cmd.ExecuteNonQuery(); //更新数据
}
使用事务批量执行SQL语句
sqlite默认执行一条sql语句为执行一条事务,当数据量比较大时,由于多条事物存在,打开和关闭文件的操作耗时比较大,可以将多条语句合并为一条事务来处理。具体的操作函数如下:
public bool DbInsertTransaction(List<string> sql_list) {
SQLiteCommand sql_cmd = new SQLiteCommand(db_conn);
SQLiteTransaction trans = db_conn.BeginTransaction();
sql_cmd.Transaction = trans;
try {
foreach (string item in sql_list) {
sql_cmd.CommandText = item;
sql_cmd.ExecuteNonQuery();
}
trans.Commit();
}catch (SQLiteException exception) {
trans.Rollback();
return false;
}
return true;
}
使用时,只需要将要执行的sql语句添加到list中传入该函数即可。如果有任意一条sql语句失败,那么将产生异常调用Rollback回滚函数,将数据库中的内容回滚回指定本次操作之前的状态。
若想在批量SQL语句中指定某条失败时,跳过,则将try catch异常捕获移动到foreach内部,然后分析失败的sql语句内容,执行相应的失败后的动作即可。