程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#操作SQLite辦法實例詳解

C#操作SQLite辦法實例詳解

編輯:C#入門知識

C#操作SQLite辦法實例詳解。本站提示廣大學習愛好者:(C#操作SQLite辦法實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C#操作SQLite辦法實例詳解正文


本文實例講述了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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved