在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# 数据类型转换

    关于C#数据类型转换,我们可以从以下几个方面进行讲解。 数据类型转换 在 C# 中,数据类型可以分为值类型和引用类型。值类型中又可分为基本数据类型和结构体类型。而在操作中,我们有时需要将数据从一种类型转换为另一种类型。 C# 中的数据类型转换可以分为以下几种: 隐式类型转换:C#中一些类型间的转换是隐含的,也就是说不需要特殊的操作就能完成,例如将short类…

    C# 2023年5月15日
    00
  • 使用.NET命令行编译器编译项目(如ASP.NET、C#等)

    使用.NET命令行编译器(通常是csc.exe)可以编译各种.NET项目,包括ASP.NET和C#等。下面是完整的攻略过程。 安装.NET Core SDK 首先,你需要安装.NET Core SDK,因为.NET命令行编译器是其中的一部分。你可以在官方网站上下载适用于你的操作系统的版本。安装完成后,你可以使用以下命令来检查.NET命令行编译器是否已经安装成…

    C# 2023年5月14日
    00
  • C#使用回溯法解决背包问题实例分析

    C#使用回溯法解决背包问题实例分析 背包问题 给定一个固定大小、能够携重量的背包和一组物品,其中每个物品都有自己的重量和价值,在保证不超过背包重量的前提下,如何选择物品使得背包中物品的总价值最大。 问题分析 实际上,背包问题的本质是在不断做出选择中寻找最优解。每次可以选择将物品放入背包或不放入。可以使用回溯法解决该问题。 回溯法常用于解决在一组可能的解中找到…

    C# 2023年6月7日
    00
  • 关于ObservableCollection的更新与不更新分析

    因为最近在WPF项目中,遇到ObservableCollection这个属性的频繁使用,一个一个坑跳过来,今天看到这个贴子 玩转INotifyPropertyChanged和ObservableCollection – 包建强 – 博客园 (cnblogs.com) 其中分析很透彻了,但是留了一点遗憾,而且在其中引起了一个想法,做一个项目来测试一下。 我们知…

    C# 2023年5月7日
    00
  • C#实现选择排序

    下面是详细讲解“C#实现选择排序”的完整攻略。 选择排序的算法原理 选择排序(Selection Sort)是一种简单直观的排序算法。其算法思想是将待排序序列分成已排序和未排序两个部分,每次从未排序的元素中选择最小(或最大)的元素,放到已排序的序列末尾。重复这个过程,直到所有元素都排序完毕。 C#实现选择排序的步骤 实现选择排序的过程有以下几个步骤: 定义待…

    C# 2023年6月6日
    00
  • asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)

    下面我将为您详细讲解asp.net(c#)开发中文件上传组件uploadify的使用方法(带进度条)的完整攻略。 一. 简介 uploadify是一款基于jQuery的文件上传插件,支持多文件上传,支持进度条显示。 二. 安装与引入 下载uploadify:在官网 https://www.uploadify.com/ 下载uploadify并解压文件。 引入…

    C# 2023年6月1日
    00
  • ASP.NET MVC使用异步Action的方法

    以下是“ASP.NET MVC使用异步Action的方法”的完整攻略: 什么是异步Action 在ASP.NET MVC中,我们可以使用异步Action来提高应用程序的性能和可伸缩性。异步Action可以在执行长时间运行的操作时释放线程,从而提高应用的吞吐量。 使用异步Action的步骤 以下是使用异步Action的步骤: 步骤1:创建异步Action 首先…

    C# 2023年5月12日
    00
  • C# ComboBox的联动操作(三层架构)

    完整攻略 首先,针对C# ComboBox的联动操作,我们需要使用三层架构的思想进行设计。 三层架构分别为: 表现层(Presentation Layer):用户界面(界面层)。 业务逻辑层(Business Logic Layer):负责业务逻辑的处理。 数据访问层(Data Access Layer):与数据存储的交互。 接下来,我们按照以下步骤进行: …

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