亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#操作SQLite方法實例詳解

2020-01-24 01:46:57
字體:
來源:轉載
供稿:網友

本文實例講述了C#操作SQLite方法。分享給大家供大家參考。具體分析如下:

地址:

System.Data.Sqlite入手。。。

首先import/using: 

復制代碼 代碼如下:
using System.Data.SQLite;

Connection和Command:

private SQLiteConnection conn; private SQLiteCommand cmd; 

連接db:

conn = new SQLiteConnection("Data Source=c://test.db");  conn.Open(); 

INSERT/UPDATE:

cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO user(email,name) VALUES ('email','name')"; cmd.ExecuteNonQuery();  cmd.CommandText = "UPDATE userSET name = 'Codelicious' WHERE ID = 1"; cmd.ExecuteNonQuery(); 

SELECT:

cmd.CommandText = "SELECT ID, name FROM user"; SQLiteDataReader reader = cmd.ExecuteReader(); if (reader.HasRows) {   while (reader.Read())   {    Console.WriteLine("ID: " + reader.GetInt16(0));    Console.WriteLine("name: " + reader.GetString(1));   } }

模板程序:

using System; using System.Data; using System.Data.Common; using System.Data.SQLite; namespace SQLiteQueryBrowser {    /// <summary>    /// 說明:這是一個針對System.Data.SQLite的數據庫常規操作封裝的通用類。    /// </summary>    public class SQLiteDBHelper    {      private string connectionString = string.Empty;      /// <summary>      /// 構造函數      /// </summary>      /// <param name="dbPath">SQLite數據庫文件路徑</param>      public SQLiteDBHelper(string dbPath)      {        this.connectionString = "Data Source=" + dbPath;      }      /// <summary>      /// 創建SQLite數據庫文件      /// </summary>      /// <param name="dbPath">要創建的SQLite數據庫文件路徑</param>      public static void CreateDB(string dbPath)      {        using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbPath))        {          connection.Open();          using (SQLiteCommand command = new SQLiteCommand(connection))          {            command.CommandText = "CREATE TABLE Demo(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE)";            command.ExecuteNonQuery();            command.CommandText = "DROP TABLE Demo";            command.ExecuteNonQuery();          }        }      }      /// <summary>      /// 對SQLite數據庫執行增刪改操作,返回受影響的行數。      /// </summary>      /// <param name="sql">要執行的增刪改的SQL語句</param>      /// <param name="parameters">執行增刪改語句所需要的參數,參數必須以它們在SQL語句中的順序為準</param>      /// <returns></returns>      public int ExecuteNonQuery(string sql, SQLiteParameter[] parameters)      {        int affectedRows = 0;        using (SQLiteConnection connection = new SQLiteConnection(connectionString))        {          connection.Open();          using (DbTransaction transaction = connection.BeginTransaction())          {            using (SQLiteCommand command = new SQLiteCommand(connection))            {              command.CommandText = sql;              if (parameters != null)              {                command.Parameters.AddRange(parameters);              }              affectedRows = command.ExecuteNonQuery();            }            transaction.Commit();          }        }        return affectedRows;      }      /// <summary>      /// 執行一個查詢語句,返回一個關聯的SQLiteDataReader實例      /// </summary>      /// <param name="sql">要執行的查詢語句</param>      /// <param name="parameters">執行SQL查詢語句所需要的參數,參數必須以它們在SQL語句中的順序為準</param>      /// <returns></returns>      public SQLiteDataReader ExecuteReader(string sql, SQLiteParameter[] parameters)      {        SQLiteConnection connection = new SQLiteConnection(connectionString);        SQLiteCommand command = new SQLiteCommand(sql, connection);        if (parameters != null)        {          command.Parameters.AddRange(parameters);        }        connection.Open();        return command.ExecuteReader(CommandBehavior.CloseConnection);      }      /// <summary>      /// 執行一個查詢語句,返回一個包含查詢結果的DataTable      /// </summary>      /// <param name="sql">要執行的查詢語句</param>      /// <param name="parameters">執行SQL查詢語句所需要的參數,參數必須以它們在SQL語句中的順序為準</param>      /// <returns></returns>      public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters)      {        using (SQLiteConnection connection = new SQLiteConnection(connectionString))        {          using (SQLiteCommand command = new SQLiteCommand(sql, connection))          {            if (parameters != null)            {              command.Parameters.AddRange(parameters);            }            SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);            DataTable data = new DataTable();            adapter.Fill(data);            return data;          }        }      }      /// <summary>      /// 執行一個查詢語句,返回查詢結果的第一行第一列      /// </summary>      /// <param name="sql">要執行的查詢語句</param>      /// <param name="parameters">執行SQL查詢語句所需要的參數,參數必須以它們在SQL語句中的順序為準</param>      /// <returns></returns>      public Object ExecuteScalar(string sql, SQLiteParameter[] parameters)      {        using (SQLiteConnection connection = new SQLiteConnection(connectionString))        {          using (SQLiteCommand command = new SQLiteCommand(sql, connection))          {            if (parameters != null)            {              command.Parameters.AddRange(parameters);            }            SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);            DataTable data = new DataTable();            adapter.Fill(data);            return data;          }        }      }      /// <summary>      /// 查詢數據庫中的所有數據類型信息      /// </summary>      /// <returns></returns>      public DataTable GetSchema()      {        using (SQLiteConnection connection = new SQLiteConnection(connectionString))        {          connection.Open();          DataTable data=connection.GetSchema("TABLES");          connection.Close();          //foreach (DataColumn column in data.Columns)          //{          //  Console.WriteLine(column.ColumnName);          //}          return data;        }      }    } }

完整的程序例子:

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Common; using System.Data.SQLite; using SQLiteQueryBrowser; namespace SQLiteDemo {    class Program    {      static void Main(string[] args)      {        //CreateTable();        //InsertData();        ShowData();        Console.ReadLine();      }      public static void CreateTable()      {        string dbPath = "D://Demo.db3";        //如果不存在改數據庫文件,則創建該數據庫文件        if (!System.IO.File.Exists(dbPath))        {          SQLiteDBHelper.CreateDB("D://Demo.db3");        }        SQLiteDBHelper db = new SQLiteDBHelper("D://Demo.db3");        string sql = "CREATE TABLE Test3(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,Name char(3),TypeName varchar(50),addDate datetime,UpdateTime Date,Time time,Comments blob)";        db.ExecuteNonQuery(sql, null);      }      public static void InsertData()      {        string sql = "INSERT INTO Test3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)";        SQLiteDBHelper db = new SQLiteDBHelper("D://Demo.db3");        for (char c = "A"; c <= "Z"; c++)        {          for (int i = 0; i < 100; i++)          {            SQLiteParameter[] parameters = new SQLiteParameter[]{              new SQLiteParameter("@Name",c+i.ToString()),            new SQLiteParameter("@TypeName",c.ToString()),            new SQLiteParameter("@addDate",DateTime.Now),            new SQLiteParameter("@UpdateTime",DateTime.Now.Date),            new SQLiteParameter("@Time",DateTime.Now.ToShortTimeString()),            new SQLiteParameter("@Comments","Just a Test"+i)            };            db.ExecuteNonQuery(sql, parameters);          }        }      }      public static void ShowData()      {        //查詢從50條起的20條記錄        string sql = "select * from test3 order by id desc limit 50 offset 20";        SQLiteDBHelper db = new SQLiteDBHelper("D://Demo.db3");        using (SQLiteDataReader reader = db.ExecuteReader(sql, null))        {          while (reader.Read())          {            Console.WriteLine("ID:{0},TypeName{1}", reader.GetInt64(0), reader.GetString(1));          }        }      }    }  }

在實際情況中,采用通用類大批量插入數據會有些慢,這是因為在System.Data.SQLite中的操作如果沒有指定操作,則會被當做一個事物,如果需要一次性寫入大量記錄,則建議顯式創建一個事物,在這個事務中完成所有的操作比較好,這樣的話比每次操作創建一個事物的效率要提升很多。

最終利用VS2008提供的功能,可以看到里面的數據如下:

需要說明的是在System.Data.SQLite中數據類型的規定不適很嚴格,從創建Test3表的SQL語句來看,表中addDate、UpdateTime、Time分別是DateTime、Date、Time類型字段,但實際上我們插入的時候沒有按照這個規定,最終顯示的結果也是盡量遵循數據庫字段的定義。

總結

System.Data.SQLite確實是一個非常小巧精悍的數據庫,作為對SQLite的封裝(SQLite可以在Android等類型的手機上利用Java訪問),它依然是體較小,同比性能高、內存消耗小、無需安裝僅需一個dll就可以運行的優點(如果在Mobile手機上則需要兩個文件),唯一的一個缺點是沒有比較的GUI(圖形用戶界面),不過正因為如此它才得以體積小。

在實際開發中沒有圖形用戶界面可能有些不便,我們可以使用VS來查看和操作數據,我自己也做了一個小東東,便于管理和維護數據,界面如下:

如果你要開發數據量在10萬條以下的應用,我建議你嘗試使用一下System.Data.SQLite,它或許是一個不錯的選擇。

public static void CreateTable(){ string dbPath = "D://Demo.db3"; //如果不存在改數據庫文件,則創建該數據庫文件  if (!System.IO.File.Exists(dbPath)) {  SQLiteDBHelper.CreateDB("D://Demo.db3"); } SQLiteDBHelper db = new SQLiteDBHelper("D://Demo.db3"); string sql = "CREATE TABLE Test3(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,Name char(3),TypeName varchar(50),addDate datetime,UpdateTime Date,Time time,Comments blob)"; db.ExecuteNonQuery(sql, null);}public static void InsertData(){ string sql = "INSERT INTO Test3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)"; SQLiteDBHelper db = new SQLiteDBHelper("D://Demo.db3"); for (char c = "A"; c <= "Z"; c++) {  for (int i = 0; i < 100; i++)  {   SQLiteParameter[] parameters = new SQLiteParameter[]{            new SQLiteParameter("@Name",c+i.ToString()),          new SQLiteParameter("@TypeName",c.ToString()),          new SQLiteParameter("@addDate",DateTime.Now),          new SQLiteParameter("@UpdateTime",DateTime.Now.Date),          new SQLiteParameter("@Time",DateTime.Now.ToShortTimeString()),          new SQLiteParameter("@Comments","Just a Test"+i)          };   db.ExecuteNonQuery(sql, parameters);  } }}public static void ShowData(){ //查詢從50條起的20條記錄  string sql = "select * from test3 order by id desc limit 50 offset 20"; SQLiteDBHelper db = new SQLiteDBHelper("D://Demo.db3"); using (SQLiteDataReader reader = db.ExecuteReader(sql, null)) {  while (reader.Read())  {   Console.WriteLine("ID:{0},TypeName{1}", reader.GetInt64(0), reader.GetString(1));  } }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人乱色短篇合集| 亚洲精品久久久久中文字幕欢迎你| 久久69精品久久久久久国产越南| 国产日韩精品一区二区| 国产精品一区久久| 国产精品久久久久久久久| 九九热这里只有精品免费看| 亚洲激情 国产| 欧美一级免费视频| 亚洲在线一区二区| 欧美成年人视频| 欧美激情欧美狂野欧美精品| 亚洲黄一区二区| 精品久久久久久久久中文字幕| 欧美激情免费观看| 成人激情免费在线| 日韩视频在线观看免费| 色播久久人人爽人人爽人人片视av| 久久久久五月天| 欧洲日韩成人av| 91免费视频国产| 国产国语videosex另类| 91久久国产精品91久久性色| 日韩精品视频中文在线观看| 伊人男人综合视频网| 成人黄在线观看| 亚洲免费av网址| 97色在线视频观看| 日韩精品在线看| 久久精品国产91精品亚洲| 久久国产精品久久国产精品| 91精品国产高清自在线| 久久6精品影院| 中文字幕日韩专区| 欧美激情在线观看视频| 国产精品白嫩美女在线观看| 国产999精品久久久影片官网| 2020国产精品视频| 午夜精品三级视频福利| 中文字幕在线亚洲| 欧美亚洲视频在线观看| 欧美激情啊啊啊| 91网站免费看| 色婷婷久久av| 久久视频中文字幕| 97婷婷大伊香蕉精品视频| 国产精品啪视频| 91在线高清免费观看| 成人观看高清在线观看免费| 国产成人综合精品| 26uuu另类亚洲欧美日本老年| 亚洲天堂免费视频| 亚洲欧美激情精品一区二区| 久久这里只有精品99| 一区二区日韩精品| 日韩av色综合| 亚洲欧美综合另类中字| 久久av资源网站| 欧美激情日韩图片| 久久电影一区二区| 国产精品美女主播在线观看纯欲| 97香蕉超级碰碰久久免费软件| 国产成人一区三区| 国产亚洲精品91在线| 欧美日韩国产在线播放| 亚洲成人网在线| 主播福利视频一区| 亚洲精品视频久久| 国产亚洲人成网站在线观看| 久久99久久99精品免观看粉嫩| 日韩在线视频导航| 亚洲第一精品自拍| 欧美大片网站在线观看| 国内精品久久久久久影视8| 亚洲国产欧美一区二区三区同亚洲| 精品久久久免费| 揄拍成人国产精品视频| 亚洲电影免费观看高清完整版在线| 亚洲第一福利网站| 久久伊人精品天天| 亚洲高清免费观看高清完整版| 欧美激情精品久久久| 日韩精品免费一线在线观看| 亚洲毛片一区二区| 91久久在线播放| 亚洲色图欧美制服丝袜另类第一页| 久久免费精品视频| 欧美日韩激情视频8区| 国产综合久久久久久| 国产脚交av在线一区二区| 亚洲国产天堂网精品网站| 日韩在线视频导航| 国产欧美日韩专区发布| 日韩男女性生活视频| 久久久综合免费视频| 亚洲欧美另类人妖| 8050国产精品久久久久久| 亚洲午夜精品久久久久久性色| 亚洲成人xxx| www国产亚洲精品久久网站| 菠萝蜜影院一区二区免费| 26uuu另类亚洲欧美日本一| 国产裸体写真av一区二区| 日韩av一区二区在线观看| 日韩中文字幕欧美| 亚洲第一福利在线观看| 精品成人乱色一区二区| 久久久久久国产精品久久| 成人免费视频在线观看超级碰| 欧美一区二区大胆人体摄影专业网站| 国产综合久久久久| 欧美日韩国产综合视频在线观看中文| 成人中心免费视频| 国产噜噜噜噜久久久久久久久| 夜夜躁日日躁狠狠久久88av| 欧美电影在线免费观看网站| 中国china体内裑精亚洲片| 日韩精品在线第一页| 国产性色av一区二区| 亚洲女在线观看| 国产精品久久久久国产a级| 日韩女优在线播放| 国产99久久精品一区二区| 国产日韩欧美在线视频观看| 国产精品久久久久久久久男| 日韩精品中文字幕在线播放| 欧美激情第一页xxx| 91色视频在线导航| 97成人超碰免| 亚洲专区中文字幕| 亚洲国内精品在线| 色婷婷综合成人av| 精品国产精品三级精品av网址| 国产精品高清在线| 懂色av一区二区三区| 国产91对白在线播放| 欧美日韩亚洲天堂| 日韩av大片免费看| 欧美精品一本久久男人的天堂| 国产精品海角社区在线观看| 亚洲一区二区三区在线视频| 亚洲精品一区二区久| 亚洲最大av在线| 一区二区三区四区在线观看视频| 欧美日韩性视频| 777777777亚洲妇女| 日韩欧美中文免费| 亚洲第一区第一页| 国产一区二区三区在线看| 91亚洲午夜在线| 欧美性猛交xxxx乱大交蜜桃| 国产精品久久久久久久app| 久久视频中文字幕| 国产精品三级在线| 国产欧美日韩高清| 精品一区二区三区三区| 最近日韩中文字幕中文| www国产精品视频| 日韩一区二区精品视频| 亚洲精品久久久久中文字幕二区| 欧美性xxxxx极品娇小| 国产精品一区二区女厕厕| 欧美色欧美亚洲高清在线视频| 精品福利免费观看|