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/p/1866288.html