轻量级桌面程序数据库不太适合用SQLServer、MySQL之类的重量级数据库,嵌入式数据库更好。在对比Access、SQLite、Firebird数据库后发现SQLite较另外两个有较多优点。

环境:.NET Framework 3.5、windows11 64位、Visual Studio 2010.

C#使用SQLite需要从SQLite官网下载DLL组件。

我是windows11,64位的开发环境,最开始下载的64位的,结果运行时报异常。通过查资料,情况比较复杂(参考:https://blog.51cto.com/xxjjing/5804868),遂重新下载了32位的包:sqlite-netFx35-binary-Win32-2008-1.0.117.0

下载地址:https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

下载后将包解压放到一个固定目录,需要依赖System.Data.SQLite.dll和SQLite.Interop.dll这两个文件,

在项目里右键项目 > 添加引用 > 选“浏览”选项卡,找到解压后的目录,引入System.Data.SQLite.dll,另一个文件SQLite.Interop.dll不可以通过引用方式添加,必须只能复制文件到运行目录下,通过调试发现程序会自动把System.Data.SQLite.dll也复制到运行目录下,System.Data.SQLite.dll和SQLite.Interop.dll文件会在一起。(尝试过直接复制这两个文件到程序的运行目录下不可行,Visual Studio里不管怎么刷新项目的引用列表都不会出现这两个文件,运行会报错。)

C# 中使用SQLite示例:

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;
using System.Data.SQLite; namespace SQLiteTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
Console.WriteLine("SQL Lite 数据库试验");
// 连接数据库,FailIfMissing=false时若文件不存在会自动创建
string connStr = "Data Source=test.db;Version=3;Pooling=true;FailIfMissing=false;";
SQLiteConnection conn = new SQLiteConnection(connStr);
conn.Open(); //在指定数据库中创建一个table
string sql = "create table highscores (name varchar(20), score int)";
SQLiteCommand command = new SQLiteCommand(sql, conn);
command.ExecuteNonQuery(); // 插入一些数据
sql = "insert into highscores (name, score) values ('Me', 3000)";
command = new SQLiteCommand(sql, conn);
command.ExecuteNonQuery(); sql = "insert into highscores (name, score) values ('Myself', 6000)";
command = new SQLiteCommand(sql, conn);
command.ExecuteNonQuery(); sql = "insert into highscores (name, score) values ('And I', 9001)";
command = new SQLiteCommand(sql, conn);
command.ExecuteNonQuery(); // 查询数据
sql = "select * from highscores order by score desc";
command = new SQLiteCommand(sql, conn);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]);
}
}
}
}

一般建表使用文本文件,不使用代码建(build.sql):

-- admin表
create table admin (
id nvarchar(32) primary key,
admin_account nvarchar(32) not null,
password nvarchar(32) not null
); -- file表
create table file (
id nvarchar(32) primary key,
user_account nvarchar(32) not null,
user_name nvarchar(32) not null,
file_path nvarchar(256) not null,
upload_start_time timestamp,
upload_end_time timestamp,
upload_ip nvarchar(20),
file_md5 nvarchar(32),
file_size integer,
file_suffix nvarchar(4)
); -- file_remove_history表
create table file_remove_history (
id nvarchar(32) primary key,
user_account nvarchar(32) not null,
user_name nvarchar(32) not null,
file_path nvarchar(256) not null,
upload_start_time timestamp,
upload_end_time timestamp,
upload_ip nvarchar(20),
file_md5 nvarchar(32),
file_size integer,
file_suffix nvarchar(4),
remove_user nvarchar(20),
remove_time timestamp
);
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;
using System.Data.SQLite;
using System.IO; namespace U8FileBackupServer
{
public partial class Form1 : Form
{ string dbFile = System.Environment.CurrentDirectory + "\\xxx.db"; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ if (!File.Exists(dbFile))
{
Console.WriteLine("文件不存在,执行创建。");
SQLiteConnection.CreateFile(dbFile);
// 连接数据库,FailIfMissing=false时若文件不存在也会自动创建
SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbFile + ";Version=3;Pooling=true;FailIfMissing=false;");
conn.Open(); // 打开连接 // 建表
string sqlText = new StreamReader(System.Environment.CurrentDirectory + "\\build.sql").ReadToEnd();
Console.WriteLine("= = = = = = = = = = = = = = = = = = = = = = = = =");
Console.WriteLine(sqlText);
Console.WriteLine("= = = = = = = = = = = = = = = = = = = = = = = = =");
SQLiteCommand cmd = new SQLiteCommand(sqlText, conn);
cmd.ExecuteNonQuery();
conn.Close(); // 关闭连接
} SQLiteConnection conn1 = new SQLiteConnection("Data Source=" + dbFile + ";Version=3;Pooling=true;FailIfMissing=true;");
conn1.Open();
        // 插入一些数据
string sql = "insert into admin (id, admin_account, password) values ('111', '管理员', 'admin')";
SQLiteCommand command = new SQLiteCommand(sql, conn1);
command.ExecuteNonQuery();
        // 查询数据
sql = "select * from admin";
command = new SQLiteCommand(sql, conn1);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("admin_account: " + reader["admin_account"] + "\tpassword: " + reader["password"]);
}

conn1.Close(); }
}
}

更多参考资料:

在C#中使用SQLite数据库的更多相关文章

  1. Android虚拟机中的sqlite数据库文件

    Android虚拟机中的sqlite数据库文件 ①

  2. 在项目中使用SQLite数据库小结

    ------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...

  3. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  4. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  5. Go语言中使用SQLite数据库

    Go语言中使用SQLite数据库 1.驱动 Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的 https://github.com/mattn/go-sqlite3 ...

  6. 在Android 开发中使用 SQLite 数据库笔记

    SQLite 介绍   SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PH ...

  7. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  8. 【Win10】在应用中使用 SQLite 数据库

    在绝大多数应用中,免不了要做的一项就是设置这样的本地数据存储.简单的数据存储我们可以使用 LocalSettings 或者 IsolatedStorageFile(独立存储)等等的方式来进行本地数据存 ...

  9. C#中使用SQLite数据库简介(上)

    [SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...

  10. 在安卓开发中使用SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

随机推荐

  1. Matlab:4维、单目标、约束、粒子群优化算法

    % 主调用函数(求最大值) clc; clear; close all; % 初始化种群 N = 100; % 初始种群个数 D = 4; % 空间维数 iter = 50; % 迭代次数 x_lim ...

  2. List<dto> 转List<map>

    /** * list<DTO> 转 list<Map<String,Object>> * * @param list * @param <T> * @r ...

  3. python通过轮子安装第三方库(以Wordcloud为例)

    1.查看python版本 直接输入如下命令: python 执行结果如下: 我们可以直到,本机的python版本为: AMD64bit 3.11版本python 2.下载合适python版本的轮子 下 ...

  4. Javaweb学习笔记第十四弹---对于Cookie和Filter的学习

    Apache Tomcat - Tomcat Native Downloads 会话追踪技术 会话:打开浏览器,建立连接,直到一方断开连接,会话才会结束:在一次会议中,可以有多次请求. 会话追踪:在多 ...

  5. Linux & 标准C语言学习 <DAY5>

    一.if分支语句     if(表达式)  //单分支语句     {           //表达式的值为真,则执行此处代码     }     if(表达式)  //双分支语句     {     ...

  6. 22.this指针

    1.this指针工作原理 我们知道,c++的数据和操作也是分开存储,并且每一个非内联成员函数(non-inline member function)只会诞生一份函数实例,也就是说多个同类型的对象会共用 ...

  7. java网络编程--4 UDP

    java网络编程--4 UDP 1.7.UDP 发短信:不用连接,但是需要知道对方的地址 主要包含两个类:DatagramPacket 和 DatagramSocket 发送消息 发送端: packa ...

  8. 钛度守望者旗舰版TSG550鼠标(原相3335芯片)拆解

    鼠标整体外观 鼠标按键支柱,采用的十字形的按键柱,没有采用现在市面上多数鼠标的平面贴片形的按键柱设计,但是耐用性比一字型的按键柱会好很多. 可换微动设计,原装的是凯华GM8.0黑曼巴8000万次微动, ...

  9. [C++STL教程]2.queue队列容器,小白都能看懂的讲解!

    在学习数据结构的时候我们会听到这样一个词:队列. 本文将介绍STL中的队列:queue 本文仅从入门和实用角度介绍queue的用法,主要针对初学者或竞赛向.如有不严谨的地方欢迎指正!本文长度约2000 ...

  10. node.js解决跨域方案

    服务端 1.通过使用cors模块解决跨域问题 var express = require('express') , cors = require('cors') , app = express(); ...