C# 使用数据库SQLite
生活随笔
收集整理的這篇文章主要介紹了
C# 使用数据库SQLite
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.數據庫下載地址 http://sqlite.phxsoftware.com/
2.下載完成添加引用System.Data.SQLite.dll
3.SQLite操作通用類
?
代碼 using?System;using?System.Collections.Generic;
using?System.Text;
using?System.Data.SQLite;
using?System.Data;
using?System.Data.Common;
namespace?PNet
{
????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??bool?IsTableExist(string?tableName)
????????{
????????????using?(SQLiteConnection?connection?=?new?SQLiteConnection(connectionString))
????????????{
????????????????connection.Open();
????????????????using?(SQLiteCommand?command?=?new?SQLiteCommand(connection))
????????????????{
????????????????????command.CommandText?=?"SELECT?COUNT(*)?FROM?sqlite_master?where?type='table'?and?name='"+tableName+"'";
????????????????????int?iaaa=?Convert.ToInt32(command.ExecuteScalar());
????????????????????if?(Convert.ToInt32(command.ExecuteScalar())?==?0)
????????????????????{
????????????????????????return?false;
????????????????????}
????????????????????else
????????????????????{
????????????????????????return?true;
????????????????????}?
????????????????}
????????????}
????????
????????}
????????///?<summary>???
????????///?創建SQLite數據庫文件???
????????///?</summary>???
????????///?<param?name="dbPath">要創建的SQLite數據庫文件路徑</param>???
????????public?static?void?CreateDB(string?dbPath,?string?sql)
????????{
????????????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.CommandText?=?sql;
????????????????????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;
????????????}
????????}
????????///?<summary>
????????///?執行查詢語句,返回DataSet
????????///?</summary>
????????///?<param?name="SQLString">查詢語句</param>
????????///?<returns>DataSet</returns>
????????public?DataSet?Query(string?SQLString)
????????{
????????????using?(SQLiteConnection?connection?=?new?SQLiteConnection(connectionString))
????????????{
????????????????DataSet?ds?=?new?DataSet();
????????????????try
????????????????{
????????????????????connection.Open();
????????????????????SQLiteDataAdapter?command?=?new?SQLiteDataAdapter(SQLString,?connection);
????????????????????command.Fill(ds,?"ds");
????????????????}
????????????????catch?(System.Data.SQLite.SQLiteException?ex)
????????????????{
????????????????????throw?new?Exception(ex.Message);
????????????????}
????????????????return?ds;
????????????}
????????}
????}
}
?
?
?
?
?4.使用舉例
代碼 using?System;using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Linq;
using?System.Text;
using?System.Windows.Forms;
using?System.Data.SQLite;
namespace?CleanFileServer
{
????public?partial?class?FrmUser?:?Form
????{
????????public?FrmUser()
????????{
????????????InitializeComponent();
????????}
????????private?string?dbPath?=?Environment.CurrentDirectory?+?"\\"?+?"USERDB.db3";
????????private?void?btnAdd_Click(object?sender,?EventArgs?e)
????????{
????????????lblMsg.Text?=?"";
????????????string?userName?=?txtUserName.Text.Trim();
????????????string?pwd?=?txtPwd.Text.Trim();
????????????if?(userName?==?"")
????????????{
????????????????lblMsg.Text?=?"用戶名不能為空!";
????????????????return;
????????????}
????????????if?(pwd?==?"")
????????????{
????????????????lblMsg.Text?=?"密碼不能為空!";
????????????????return;
????????????}?????????
????????????CreateTable();
????????????InsertData(userName,?pwd);
????????????ShowData();
????????????txtUserName.Text?=?"";
????????????txtPwd.Text?=?"";
????????}
????????private??void?CreateTable()???
????????{??????????
????????????//如果不存在改數據庫文件,則創建該數據庫文件???
????????????
??????????? SQLiteDBHelper db = new SQLiteDBHelper(dbPath);
??????????? if (!db.IsTableExist("USER"))
??????????? {
??????????????? string sql = "CREATE TABLE USER(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,UserName varchar(30),Password varchar(50),Level varchar(2),AddDate datetime)";
??????????????? db.ExecuteNonQuery(sql, null);
??????????? }???????????
????????}
????????private??void?InsertData(string?userName,?string?pwd)
????????{
????????????string?sql?=?"INSERT?INTO?USER(UserName,Password,AddDate)values(@UserName,@Password,@AddDate)";
????????????SQLiteDBHelper?db?=?new?SQLiteDBHelper(dbPath);
????????????SQLiteParameter[]?parameters?=?new?SQLiteParameter[]{???
????????????????????????new?SQLiteParameter("@UserName",userName),???
????????????????????new?SQLiteParameter("@Password",pwd),???
????????????????????new?SQLiteParameter("@AddDate",DateTime.Now)?????????????????
????????????????????};
????????????db.ExecuteNonQuery(sql,?parameters);???
???????????
????????}
????????private??void?ShowData()
????????{
????????????string?sql?=?"select?UserName,Password,AddDate?from?User?order?by?id?desc";
????????????SQLiteDBHelper?db?=?new?SQLiteDBHelper(dbPath);
????????????DataSet?ds=db.Query(sql);
????????????gdvUser.DataSource?=?ds.Tables["ds"];
?????????
????????}
????????private??void?ReadData()???
????????{
??????????
????????????string?id;
????????????string?userName;
????????????string?pwd;
????????????string?addDate;
???????????//查詢從50條起的20條記錄???
???????????//string?sql?=?"select?*?from?User?order?by?id?desc?limit?50?offset?20";???
????????????string?sql?=?"select?id,UserName,Password,AddDate?from?User?order?by?id?desc";
????????????SQLiteDBHelper?db?=?new?SQLiteDBHelper(dbPath);???
???????????using?(SQLiteDataReader?dr?=?db.ExecuteReader(sql,?null))???
???????????{
???????????????while?(dr.Read())
???????????????{
???????????????????id?=?dr["id"].ToString();
???????????????????userName?=?dr["UserName"].ToString();
???????????????????pwd?=?dr["Password"].ToString();
???????????????????addDate?=?dr["AddDate"].ToString();
???????????????}
?????????????
???????????}???
????????}
????????private?void?FrmUser_Load(object?sender,?EventArgs?e)
????????{
????????????lblMsg.Text?=?"";
????????????ShowData();
????????}
????????private?void?btnDelete_Click(object?sender,?EventArgs?e)
????????{
????????????lblMsg.Text?=?"";
????????????string?userName?=?txtUserName.Text.Trim();
????????????string?pwd?=?txtPwd.Text.Trim();
????????????if?(userName?==?"")
????????????{
????????????????return;
????????????}
????????????try
????????????{
??????????
????????????????DialogResult?dlR?=?MessageBox.Show(this,?"確定要刪除嗎?",?"請確認",?MessageBoxButtons.YesNo,
????????????????????MessageBoxIcon.Question,?MessageBoxDefaultButton.Button1,?MessageBoxOptions.RightAlign);
????????????????if?(dlR?==?DialogResult.Yes)
????????????????{
????????????????????string?sql?=?"delete?from?User?where?UserName=@UserName?";
????????????????????SQLiteDBHelper?sqlHelper?=?new?SQLiteDBHelper(dbPath);
????????????????????SQLiteParameter[]?parameters?=?new?SQLiteParameter[]{???
????????????????????????new?SQLiteParameter("@UserName",userName)???
?????????????????????????????????
????????????????????};
????????????????????sqlHelper.ExecuteNonQuery(sql,?parameters);
????????????????????lblMsg.Text?=?"成功刪除!";
????????????????????ShowData();
????????????????}
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????lblMsg.Text?=?ex.Message;
????????????}
????????}
?
5.出現錯誤
混合模式程序集是針對“v2.0.50727”版的運行時生成的,在沒有配置其他信息的情況下,無法在 4.0 運行時中加載該程序集。
在App.config添加
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
? <startup useLegacyV2RuntimeActivationPolicy="true">
??? <supportedRuntime version="v4.0"/>
? </startup>
</configuration>
?
?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SQLite; using System.Data; using System.Windows.Forms;namespace Dispatcha_PadWin10 {public class DBHelper{private string connectionString = "Data Source=" + Environment.CurrentDirectory + "\\" + "db.db";public void ExecuteNonQuery(string sql){using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand command = new SQLiteCommand(conn)){ command.CommandText = sql;command.ExecuteNonQuery(); }}}public bool IsWorkStationExist(string work_station){bool isExist = false;string sql = "select work_station from station where work_station='" + work_station + "'";using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = new SQLiteCommand()){cmd.Connection = conn;cmd.CommandText = sql;using (SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)){isExist= dr.Read(); }}}return isExist;} public void LoadStationToDgv(DataGridView dgv){string sql = "select work_station,work_x,work_y,store_station,store_x,store_y,can_charger from station";using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = new SQLiteCommand(sql,conn)){using (SQLiteDataReader dr = cmd.ExecuteReader()){while( dr.Read()){int index = dgv.Rows.Add();dgv.Rows[index].Cells[0].Value = dr["work_station"].ToString();dgv.Rows[index].Cells[1].Value = dr["work_x"].ToString();dgv.Rows[index].Cells[2].Value = dr["work_y"].ToString();dgv.Rows[index].Cells[3].Value = dr["store_station"].ToString();dgv.Rows[index].Cells[4].Value = dr["store_x"].ToString();dgv.Rows[index].Cells[5].Value = dr["store_y"].ToString();dgv.Rows[index].Cells[6].Value = dr["can_charger"].ToString();}}}}}public List<string> getWorkStations(){List<string> lst = new List<string>();string sql = "select work_station from station";using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = new SQLiteCommand(sql, conn)){using (SQLiteDataReader dr = cmd.ExecuteReader()){while (dr.Read()){lst.Add(dr["work_station"].ToString().Trim()); }}}}return lst;}public StationInfo getWorkStationInfo(string workStation){StationInfo stationInfo = new StationInfo();string sql = "select work_station,work_x,work_y,store_station,store_x,store_y,can_charger from station "+ "where work_station='"+ workStation+"'";using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = new SQLiteCommand(sql, conn)){using (SQLiteDataReader dr = cmd.ExecuteReader()){while (dr.Read()){stationInfo.Work_station = dr["work_station"].ToString();stationInfo.Work_x =double.Parse( dr["work_x"].ToString());stationInfo.Work_y = double.Parse(dr["work_y"].ToString());stationInfo.Store_station = dr["store_station"].ToString();stationInfo.Store_x = double.Parse(dr["store_x"].ToString());stationInfo.Store_y = double.Parse(dr["store_y"].ToString());stationInfo.Can_charge = int.Parse(dr["can_charger"].ToString());}}}}return stationInfo;}} }?
?
轉載于:https://www.cnblogs.com/ike_li/archive/2010/11/01/1866288.html
總結
以上是生活随笔為你收集整理的C# 使用数据库SQLite的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java捕获并处理线程失败抛出的异常
- 下一篇: c#左移、右移基础