在C#中使用SQLite数据库

轻量级桌面程序数据库不太适合用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(); } } }

 

更多参考资料:

原文链接:https://www.cnblogs.com/jsper/p/17346758.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在C#中使用SQLite数据库 - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • C# Quartzs定时器的使用教程

    C# Quartz定时器的使用教程 什么是Quartz定时器? Quartz是一个强大的开源企业级调度框架,主要用于执行任务、计划任务、调度和定时任务等等。C# Quartz定时器是基于Quartz开源调度框架在C#环境下进行开发、应用的框架,可以更容易地实现任务调度和自动化任务执行等功能。 C# Quartz定时器的主要特点包括: 支持多种任务调度模式 灵…

    C# 2023年6月1日
    00
  • 详细介绍C# 泛型

    详细介绍C#泛型 什么是泛型? 泛型是C#语言中的一种数据类型,它允许我们写出能够适用于多种数据类型的代码。泛型作用于类、接口、方法等,可以大大提高代码的复用性和可读性。 泛型的语法与用法 泛型类 泛型类可以适用于多种数据类型,我们可以通过类名后加尖括号传入数据类型,例如: public class MyList<T> { private T[]…

    C# 2023年5月15日
    00
  • .net core版 文件上传/ 支持批量上传拖拽及预览功能(bootstrap fileinput上传文件)

    .NET Core版文件上传攻略 在.NET Core应用程序中,文件上传是一项常见的任务。本攻略将深入探讨如何使用Bootstrap FileInput插件实现文件上传,并提供两个示例说明。 安装Bootstrap FileInput插件 在.NET Core应用程序中,您需要安装Bootstrap FileInput插件。您可以使用NuGet包管理器或命…

    C# 2023年5月17日
    00
  • c# 断点续传的实现

    C# 断点续传的实现攻略 什么是断点续传 断点续传是指当网络传输中断或者用户主动暂停传输时,继续从中断或者暂停的地方继续传输,以达到复制大文件的目的。断点续传技术可以减少文件传输的时间,同时避免重复传输已经传输过的文件,减轻服务器负担,提高传输成功率和效率。 在 C# 中,我们可以通过一些类库和方法来实现断点续传功能。 实现断点续传的步骤 以下是基本的实现步…

    C# 2023年6月6日
    00
  • asp.net(C#)生成无限级别菜单

    生成无限级别菜单是一个常见的需求,而使用ASP.NET(C#)实现无限级别菜单可以通过递归来解决。以下是实现过程的详细攻略: 创建数据库表 首先,需要在数据库中保存菜单数据,可以通过如下的SQL语句来创建一个menu数据表: CREATE TABLE [dbo].[menu]( [id] [int] IDENTITY(1,1) NOT NULL, [name…

    C# 2023年5月31日
    00
  • System.Runtime.InteropServices.COMException的解决方法

    下面是详细讲解 System.Runtime.InteropServices.COMException 异常的解决方法的完整攻略: 什么是 System.Runtime.InteropServices.COMException 异常 System.Runtime.InteropServices.COMException 是 .NET 框架中的一种特殊的异常类…

    C# 2023年6月6日
    00
  • 如何使用C#中的Lazy的使用方法

    下面是关于如何使用C#中的Lazy的完整攻略。 什么是Lazy Lazy 是 .NET 中提供的一种延迟初始化的机制。它可以推迟对象的创建和初始化,直到第一次访问此对象。 如何使用Lazy 创建Lazy对象 使用 Lazy 首先需要创建一个 Lazy<T> 对象,这里的 T 代表延迟初始化对象的类型。同时需要为 Lazy 提供一个工厂方法用于创建…

    C# 2023年6月2日
    00
  • C# 基于NPOI操作Excel

    C#基于NPOI操作Excel 在C#中,我们可以使用NPOI操作Excel文件。NPOI是一个开源的.NET库,它提供了对Microsoft Office的读取和写入支持。在本文中,我们将介绍使用NPOI操作Excel的完整攻略。 安装NPOI 要使用NPOI,我们需要先安装它。我们可以通过NuGet安装NPOI。在Visual Studio中,依次打开”…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部