C# 使用数据库SQLite
1.数据库下载地址 http://sqlite.phxsoftware.com/
2.下载完成添加引用System.Data.SQLite.dll
3.SQLite操作通用类
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.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相关推荐
- Python中使用数据库SQLite和MySQL
一.数据库SQLite 1 建立数据库与建立表 直接来看例子: import sqlite3conn = sqlite3.connect("test.db"); c = conn. ...
- 嵌入式数据库SQLite的编译、安装和使用[ZT]
嵌入式数据库SQLite的编译.安装和使用 下文介绍的内容都是基于 RedHat Linux 9.0 平台的. 引言:sqlite简介 sqlite是嵌入式SQL数据库引擎SQLite(SQLite ...
- sqlitestudio和mysql_SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)
前言 调试Android中的数据库有多种方式,目前比较流行的是:借助电脑端浏览器来调试,可以使用如下两个玩意: 博主在调试sqlite的时候,发现了个更加简单和强大的工具来调试sqlite数据库. S ...
- Android 学习心得(2)——Android内置数据库SQLite
一.简介: Android有一个内置数据库SQLite,它是一种轻型数据库,它有五种数据类型:NULL(空型).BLOB(二进制).INTEGER(整型).REAL(浮点型).TEXT(字符串文本), ...
- 【嵌入式实验】《嵌入式数据库 sqlite 移植及使用》
嵌入式数据库 sqlite 移植及使用 一.实验目的 二.实验内容 三.预备知识 四.实验设备及工具(包括软件调试工具) 五.实验步骤 实验一:移植嵌入式数据库 sqlite 1~5:安装 sqlit ...
- 嵌入式数据库Sqlite移植教程-转
嵌入式数据库Sqlite移植教程 sqlite-3.3.6编译安装与交叉编译全过程详细记录 本文介绍的内容都是基于 Linux RedHat 9.0 平台的. 一.PC机编译安装 请阅读在安装包里的 ...
- 《一》Android 数据库 SQlite SQLiteOpenHelper
/* 大家都知道写博客会很累的,大热天的. 希望=转载请注明出处:http://blog.csdn.net/ta893115871 请不要可怜你的鼠标,(*^__^*) 嘻嘻-- */ 众所周知,数据 ...
- Android 数据库Sqlite的使用(1)
在Android中,我们使用的数据库是一个轻量级的数据库 sqlite 下面我们来学习一下它的CURD操作 首先 我们需要创建一个类 继承自android自带的一个数据库帮助类SQLiteOpenHe ...
- android 内嵌 数据库,安卓开发之嵌入式数据库sqlite的操作方法
安卓App开发经常会需要嵌入式数据库sqlite的辅助,它可以存放我们必要的应用数据,下面介绍下如何使用java连接读取sqlite中的数据. 本文中的代码经本人测试可用,可以参考. 代码如下: DB ...
- Python网络爬虫和信息提取:(动态网站)双色球数据爬取及写入数据库Sqlite、json和Excel表
我想着拿什么练习下网络爬虫信息提取时,就想到了双色球,心想把往期数据提取出来也是个不错的主意,把数据保存下来以后做数据分析,根据分析结果去买双色球岂不是美哉?!哈哈哈.. 当然这里仅是爬取和保存,数据 ...
最新文章
- php BC高精确度函数库
- linux odbc 数据源测试,linux操作系统配置ODBC数据源
- tomcat mysql数据源_Tomcat mysql 配置数据源
- superslide 学习笔记
- 题目1002:Grading
- 中子穿墙问题的MonteCarlo求解方法
- Mac 连过的 WiFi 怎么查密码?看这→
- Windows10远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法
- python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
- Rational Rose安装教程
- 从 0 搭建 Vite 3 + Vue 3 前端工程化项目
- vscode中backspace按键失效
- css3的含义是什么
- 爱普生Epson Stylus Photo P50 打印机驱动
- OKRs,自由之风劲吹,发挥无限创造力 | Chatopera
- Logaster让设计logo更简单
- ENDNOTE使用方法(转发)
- 【人工智能】实验一:基于MLP的手写体字符识别
- php mysql 课件_php课件
- 论文阅读笔记《Decoupled Visual Servoing With Fuzzy Q-Learning》