環境配置:windows ,VS,SQLite(點擊下載),System.Data.SQLite.DLL(點擊下載)。 目錄: 一、新建項目,添加引用 二、創建資料庫 三、創建表 四、插入數據 五、查詢數據 六、刪除數據 一、新建項目,添加引用 1.在VS中新建一個控制台應用程式,如下圖 2.添加引 ...
環境配置:windows ,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)
具體代碼
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data.SQLite; 6 using System.Data; 7 using System.Xml; 8 using System.Text.RegularExpressions; 9 using System.IO; 10 11 namespace CSharp_SQLite 12 { 13 public class CSQLiteHelper 14 { 15 private string _dbName = ""; 16 private SQLiteConnection _SQLiteConn = null; //連接對象 17 private SQLiteTransaction _SQLiteTrans = null; //事務對象 18 private bool _IsRunTrans = false; //事務運行標識 19 private string _SQLiteConnString = null; //連接字元串 20 private bool _AutoCommit = false; //事務自動提交標識 21 22 public string SQLiteConnString 23 { 24 set { this._SQLiteConnString = value; } 25 get { return this._SQLiteConnString; } 26 } 27 28 public CSQLiteHelper(string dbPath) 29 { 30 this._dbName = dbPath; 31 this._SQLiteConnString = "Data Source=" + dbPath; 32 } 33 34 /// <summary> 35 /// 新建資料庫文件 36 /// </summary> 37 /// <param name="dbPath">資料庫文件路徑及名稱</param> 38 /// <returns>新建成功,返回true,否則返回false</returns> 39 static public Boolean NewDbFile(string dbPath) 40 { 41 try 42 { 43 SQLiteConnection.CreateFile(dbPath); 44 return true; 45 } 46 catch (Exception ex) 47 { 48 throw new Exception("新建資料庫文件" + dbPath + "失敗:" + ex.Message); 49 } 50 } 51 52 53 /// <summary> 54 /// 創建表 55 /// </summary> 56 /// <param name="dbPath">指定資料庫文件</param> 57 /// <param name="tableName">表名稱</param> 58 static public void NewTable(string dbPath, string tableName) 59 { 60 61 SQLiteConnection sqliteConn = new SQLiteConnection("data source=" + dbPath); 62 if (sqliteConn.State != System.Data.ConnectionState.Open) 63 { 64 sqliteConn.Open(); 65 SQLiteCommand cmd = new SQLiteCommand(); 66 cmd.Connection = sqliteConn; 67 cmd.CommandText = "CREATE TABLE " + tableName + "(Name varchar,Team varchar, Number varchar)"; 68 cmd.ExecuteNonQuery(); 69 } 70 sqliteConn.Close(); 71 } 72 /// <summary> 73 /// 打開當前資料庫的連接 74 /// </summary> 75 /// <returns></returns> 76 public Boolean OpenDb() 77 { 78 try 79 { 80 this._SQLiteConn = new SQLiteConnection(this._SQLiteConnString); 81 this._SQLiteConn.Open(); 82 return true; 83 } 84 catch (Exception ex) 85 { 86 throw new Exception("打開資料庫:" + _dbName + "的連接失敗:" + ex.Message); 87 } 88 } 89 90 /// <summary> 91 /// 打開指定資料庫的連接 92 /// </summary> 93 /// <param name="dbPath">資料庫路徑</param> 94 /// <returns></returns> 95 public Boolean OpenDb(string dbPath) 96 { 97 try 98 { 99 string sqliteConnString = "Data Source=" + dbPath; 100 101 this._SQLiteConn = new SQLiteConnection(sqliteConnString); 102 this._dbName = dbPath; 103 this._SQLiteConnString = sqliteConnString; 104 this._SQLiteConn.Open(); 105 return true; 106 } 107 catch (Exception ex) 108 { 109 throw new Exception("打開資料庫:" + dbPath + "的連接失敗:" + ex.Message); 110 } 111 } 112 113 /// <summary> 114 /// 關閉資料庫連接 115 /// </summary> 116 public void CloseDb() 117 { 118 if (this._SQLiteConn != null && this._SQLiteConn.State != ConnectionState.Closed) 119 { 120 if (this._IsRunTrans && this._AutoCommit) 121 { 122 this.Commit(); 123 } 124 this._SQLiteConn.Close(); 125 this._SQLiteConn = null; 126 } 127 } 128 129 /// <summary> 130 /// 開始資料庫事務 131 /// </summary> 132 public void BeginTransaction() 133 { 134 this._SQLiteConn.BeginTransaction(); 135 this._IsRunTrans = true; 136 } 137 138 /// <summary> 139 /// 開始資料庫事務 140 /// </summary> 141 /// <param name="isoLevel">事務鎖級別</param> 142 public void BeginTransaction(IsolationLevel isoLevel) 143 { 144 this._SQLiteConn.BeginTransaction(isoLevel); 145 this._IsRunTrans = true; 146 } 147 148 /// <summary> 149 /// 提交當前掛起的事務 150 /// </summary> 151 public void Commit() 152 { 153 if (this._IsRunTrans) 154 { 155 this._SQLiteTrans.Commit(); 156 this._IsRunTrans = false; 157 } 158 } 159 160 161 } 162 }View Code
此時運行會報錯,
警告 所生成項目的處理器架構“MSIL”與引用“System.Data.SQLite”的處理器架構“x86”不匹配。這種不匹配可能會導致運行時失敗。請考慮通過配置管理器更改您的項目的目標處理器架構,以使您的項目與引用間的處理器架構保持一致,或者為引用關聯一個與您的項目的目標處理器架構相符的處理器架構。
修改項目屬性:x86。
再次運行,無誤。
SQLite 是文件型的資料庫,尾碼名可以是".db3"、".db"或者“.sqlite”,甚至可以由你決定它的尾碼。其中前3個類型是SQLite預設類型。
新建一個資料庫文件,代碼如下
1 /// <summary> 2 /// 新建資料庫文件 3 /// </summary> 4 /// <param name="dbPath">資料庫文件路徑及名稱</param> 5 /// <returns>新建成功,返回true,否則返回false</returns> 6 static public Boolean NewDbFile(string dbPath) 7 { 8 try 9 { 10 SQLiteConnection.CreateFile(dbPath); 11 return true; 12 } 13 catch (Exception ex) 14 { 15 throw new Exception("新建資料庫文件" + dbPath + "失敗:" + ex.Message); 16 } 17 }
1 /// <summary> 2 /// 創建表 3 /// </summary> 4 /// <param name="dbPath">指定資料庫文件</param> 5 /// <param name="tableName">表名稱</param> 6 static public void NewTable(string dbPath, string tableName) 7 { 8 9 SQLiteConnection sqliteConn = new SQLiteConnection("data source=" + dbPath); 10 if (sqliteConn.State != System.Data.ConnectionState.Open) 11 { 12 sqliteConn.Open(); 13 SQLiteCommand cmd = new SQLiteCommand(); 14 cmd.Connection = sqliteConn; 15 cmd.CommandText = "CREATE TABLE " + tableName + "(Name varchar,Team varchar, Number varchar)"; 16 cmd.ExecuteNonQuery(); 17 } 18 sqliteConn.Close(); 19 }
例子:創建一個資料庫文件 NBA.db3
然後創建表Stars,再創建表的列,Name,Team,Number。
1 class Program 2 { 3 private static string dbPath = @"d:\NBA.db3"; 4 static void Main(string[] args) 5 { 6 //創建一個資料庫db文件 7 CSQLiteHelper.NewDbFile(dbPath); 8 //創建一個表 9 string tableName = "Stars"; 10 CSQLiteHelper.NewTable(dbPath, tableName); 11 } 12 }
看下效果,資料庫文件NBA的表Stars中有Name,Team和Number欄位
接下來,使用SQLite 的 INSERT INTO 語句用於向資料庫的某個表中添加新的數據行。
先在Main()方法中創建一些數據。
1 List<object[]> starsDatas = new List<object[]>(); 2 starsDatas.Add(new object[] { "Garnett", "Timberwolves", "21" }); 3 starsDatas.Add(new object[] { "Jordan", "Bulls", "23" }); 4 starsDatas.Add(new object[] { "Kobe", "Lakers", "24" }); 5 starsDatas.Add(new object[] { "James", "Cavaliers", "23" }); 6 starsDatas.Add(new object[] { "Tracy", "Rockets", "1" }); 7 starsDatas.Add(new object[] { "Carter", "Nets", "15" });
將數據插入到表單中
1 private static void AddStars(List<object[]> stars) 2 { 3 CSQLiteHelper sqlHelper = new CSQLiteHelper(dbPath); 4 sqlHelper.OpenDbConn(); 5 string commandStr = "insert into Stars(Name,Team,Number) values(@name,@team,@number)"; 6 foreach (var item in stars) 7 { 8 if (isExist("Name", item[0].ToString())) 9 { 10 Console.WriteLine(item[0] + "的數據已存在!"); 11 continue; 12 } 13 else 14 { 15 sqlHelper.ExecuteNonQuery(commandStr, item); 16 Console.WriteLine(item[0] + "的數據已保存!"); 17 Console.ReadKey(); 18 } 19 } 20 sqlHelper.CloseDbConn(); 21 Console.ReadKey(); 22 23 }
效果如下:
SQLite 的 SELECT 語句用於從 SQLite 資料庫表中獲取數據,以結果表的形式返回數據。這些結果表也被稱為結果集。
一個簡單的例子:查詢一個球星所在的球隊。
輸進球星的名字,輸出球隊。
1 private static void Team(string name) 2 { 3 CSQLiteHelper sqliteHelper = new CSQLiteHelper(dbPath); 4 sqliteHelper.OpenDbConn(); 5 string commandText = @"select * from Stars where Name ='" + name+"'"; 6 DataTable dt = sqliteHelper.Query(commandText).Tables[0]; 7 if (dt.Rows.Count == 0) 8 { 9 Console.WriteLine("查無此人!"); 10 Console.ReadLine(); 11 sqliteHelper.CloseDbConn(); 12 return; 13 } 14 string team = dt.Rows[0]["Team"].ToString(); 15 sqliteHelper.CloseDbConn(); 16 Console.WriteLine(name + "--" + team); 17 Console.ReadKey(); 18 }
1 static void Main(string[] args) 2 { 3 Console.WriteLine("請輸入一個Star:"); 4 string name = Console.ReadLine(); 5 Team(name); 6 }
效果如下
SQLite 的 DELETE 語句用於刪除表中已有的記錄。可以使用帶有 WHERE 子句的 DELETE 查詢來刪除選定行,否則所有的記錄都會被刪除。
1 private static void Delete(string name) 2 { 3 CSQLiteHelper sqliteHelper = new CSQLiteHelper(dbPath); 4 sqliteHelper.OpenDbConn(); 5 string commandtext = "delete from Stars where Name = '" + name + "'"; 6 sqliteHelper.ExecuteNonQuery(commandtext); 7 sqliteHelper.CloseDbConn(); 8 Console.WriteLine(name + "被刪除!"); 9 }
註意:delete語句與select語句不同,delete後直接跟from,不能寫成:
"delete * from Stars where [condition];
調用一下
Console.WriteLine("刪除球星:"); string starName = Console.ReadLine(); Delete(starName);
刪除前:
刪除後:
歡迎留言區討論,如果有幫助,就頂一下吧~
歡迎打賞