有问题欢迎留言!!!
原文链接:https://www.cnblogs.com/zhaoliankun/p/9088200.html
目录:
一、新建项目,添加引用
二、创建数据库
三、创建表
四、插入数据
五、查询数据
六、删除数据
七、运算符
八、like语句
我的环境配置:windows 64,VS,SQLite(点击下载),System.Data.SQLite.DLL(点击下载)。
一、新建项目,添加引用
1.在VS中新建一个控制台应用程序,如下图
2.添加引用
将下载的System.Data.SQLite.DLL复制到新建项目的路径下
在VS中找到项目,右键选择添加引用
浏览到dll路径下,添加进来。
代码中添加
using System.Data.SQLite;
添加类库CSQLiteHelper,用于存放SQLite操作方法(此代码原文链接. https://blog.csdn.net/pukuimin1226/article/details/8516733)
具体代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;
using System.Xml;
using System.Text.RegularExpressions;
using System.IO;
namespace CSharp_SQLite
{
public class CSQLiteHelper
{
private string _dbName = "";
private SQLiteConnection _SQLiteConn = null; //连接对象
private SQLiteTransaction _SQLiteTrans = null; //事务对象
private bool _IsRunTrans = false; //事务运行标识
private string _SQLiteConnString = null; //连接字符串
private bool _AutoCommit = false; //事务自动提交标识
public string SQLiteConnString
{
set { this._SQLiteConnString = value; }
get { return this._SQLiteConnString; }
}
public CSQLiteHelper(string dbPath)
{
this._dbName = dbPath;
this._SQLiteConnString = "Data Source=" + dbPath;
}
/// <summary>
/// 新建数据库文件
/// </summary>
/// <param name="dbPath">数据库文件路径及名称</param>
/// <returns>新建成功,返回true,否则返回false</returns>
static public Boolean NewDbFile(string dbPath)
{
try
{
SQLiteConnection.CreateFile(dbPath);
return true;
}
catch (Exception ex)
{
throw new Exception("新建数据库文件" + dbPath + "失败:" + ex.Message);
}
}
/// <summary>
/// 创建表
/// </summary>
/// <param name="dbPath">指定数据库文件</param>
/// <param name="tableName">表名称</param>
static public void NewTable(string dbPath, string tableName)
{
SQLiteConnection sqliteConn = new SQLiteConnection("data source=" + dbPath);
if (sqliteConn.State != System.Data.ConnectionState.Open)
{
sqliteConn.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = sqliteConn;
cmd.CommandText = "CREATE TABLE " + tableName + "(Name varchar,Team varchar, Number varchar)";
cmd.ExecuteNonQuery();
}
sqliteConn.Close();
}
/// <summary>
/// 打开当前数据库的连接
/// </summary>
/// <returns></returns>
public Boolean OpenDb()
{
try
{
this._SQLiteConn = new SQLiteConnection(this._SQLiteConnString);
this._SQLiteConn.Open();
return true;
}
catch (Exception ex)
{
throw new Exception("打开数据库:" + _dbName + "的连接失败:" + ex.Message);
}
}
/// <summary>
/// 打开指定数据库的连接
/// </summary>
/// <param name="dbPath">数据库路径</param>
/// <returns></returns>
public Boolean OpenDb(string dbPath)
{
try
{
string sqliteConnString = "Data Source=" + dbPath;
this._SQLiteConn = new SQLiteConnection(sqliteConnString);
this._dbName = dbPath;
this._SQLiteConnString = sqliteConnString;
this._SQLiteConn.Open();
return true;
}
catch (Exception ex)
{
throw new Exception("打开数据库:" + dbPath + "的连接失败:" + ex.Message);
}
}
/// <summary>
/// 关闭数据库连接
/// </summary>
public void CloseDb()
{
if (this._SQLiteConn != null && this._SQLiteConn.State != ConnectionState.Closed)
{
if (this._IsRunTrans && this._AutoCommit)
{
this.Commit();
}
this._SQLiteConn.Close();
this._SQLiteConn = null;
}
}
/// <summary>
/// 开始数据库事务
/// </summary>
public void BeginTransaction()
{
this._SQLiteConn.BeginTransaction();
this._IsRunTrans = true;
}
/// <summary>
/// 开始数据库事务
/// </summary>
/// <param name="isoLevel">事务锁级别</param>
public void BeginTransaction(IsolationLevel isoLevel)
{
this._SQLiteConn.BeginTransaction(isoLevel);
this._IsRunTrans = true;
}
/// <summary>
/// 提交当前挂起的事务
/// </summary>
public void Commit()
{
if (this._IsRunTrans)
{
this._SQLiteTrans.Commit();
this._IsRunTrans = false;
}
}
}
}
此时运行会报错,
警告 所生成项目的处理器架构“MSIL”与引用“System.Data.SQLite”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改您的项目的目标处理器架构,以使您的项目与引用间的处理器架构保持一致,或者为引用关联一个与您的项目的目标处理器架构相符的处理器架构。
修改项目属性:x86。
再次运行,无误。
二、创建数据库
SQLite 是文件型的数据库,后缀名可以是".db3"、".db"或者“.sqlite”,甚至可以由你决定它的后缀。其中前3个类型是SQLite默认类型。
新建一个数据库文件,代码如下
/// <summary>
/// 新建数据库文件
/// </summary>
/// <param name="dbPath">数据库文件路径及名称</param>
/// <returns>新建成功,返回true,否则返回false</returns>
static public Boolean NewDbFile(string dbPath)
{
try
{
SQLiteConnection.CreateFile(dbPath);
return true;
}
catch (Exception ex)
{
throw new Exception("新建数据库文件" + dbPath + "失败:" + ex.Message);
}
}
三、创建表
/// <summary>
/// 创建表
/// </summary>
/// <param name="dbPath">指定数据库文件</param>
/// <param name="tableName">表名称</param>
static public void NewTable(string dbPath, string tableName)
{
SQLiteConnection sqliteConn = new SQLiteConnection("data source=" + dbPath);
if (sqliteConn.State != System.Data.ConnectionState.Open)
{
sqliteConn.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = sqliteConn;
cmd.CommandText = "CREATE TABLE " + tableName + "(Name varchar,Team varchar, Number varchar)";
cmd.ExecuteNonQuery();
}
sqliteConn.Close();
}
例子:创建一个数据库文件 NBA.db3
然后创建表Stars,再创建表的列,Name,Team,Number。
class Program
{
private static string dbPath = @"d:\NBA.db3";
static void Main(string[] args)
{
//创建一个数据库db文件
CSQLiteHelper.NewDbFile(dbPath);
//创建一个表
string tableName = "Stars";
CSQLiteHelper.NewTable(dbPath, tableName);
}
}
看下效果,数据库文件NBA的表Stars中有Name,Team和Number字段
四、插入数据
接下来,使用SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。
先在Main()方法中创建一些数据。
List<object[]> starsDatas = new List<object[]>();
starsDatas.Add(new object[] { "Garnett", "Timberwolves", "21" });
starsDatas.Add(new object[] { "Jordan", "Bulls", "23" });
starsDatas.Add(new object[] { "Kobe", "Lakers", "24" });
starsDatas.Add(new object[] { "James", "Cavaliers", "23" });
starsDatas.Add(new object[] { "Tracy", "Rockets", "1" });
starsDatas.Add(new object[] { "Carter", "Nets", "15" });
将数据插入到表单中
private static void AddStars(List<object[]> stars)
{
CSQLiteHelper sqlHelper = new CSQLiteHelper(dbPath);
sqlHelper.OpenDbConn();
string commandStr = "insert into Stars(Name,Team,Number) values(@name,@team,@number)";
foreach (var item in stars)
{
if (isExist("Name", item[0].ToString()))
{
Console.WriteLine(item[0] + "的数据已存在!");
continue;
}
else
{
sqlHelper.ExecuteNonQuery(commandStr, item);
Console.WriteLine(item[0] + "的数据已保存!");
Console.ReadKey();
}
}
sqlHelper.CloseDbConn();
Console.ReadKey();
}
效果如下:
五、查询数据
SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
一个简单的例子:查询一个球星所在的球队。
输入球星的名字,输出球队。
private static void Team(string name)
{
CSQLiteHelper sqliteHelper = new CSQLiteHelper(dbPath);
sqliteHelper.OpenDbConn();
string commandText = @"select * from Stars where Name ='" + name+"'";
DataTable dt = sqliteHelper.Query(commandText).Tables[0];
if (dt.Rows.Count == 0)
{
Console.WriteLine("查无此人!");
Console.ReadLine();
sqliteHelper.CloseDbConn();
return;
}
string team = dt.Rows[0]["Team"].ToString();
sqliteHelper.CloseDbConn();
Console.WriteLine(name + "--" + team);
Console.ReadKey();
}
static void Main(string[] args)
{
Console.WriteLine("请输入一个Star:");
string name = Console.ReadLine();
Team(name);
}
效果如下