C# 内嵌数据库 SQLite

news/2025/1/6 11:39:22/文章来源:https://www.cnblogs.com/tyxajh/p/18652149

最近,看到一个软件,软件是使用的内嵌数据库。我对这个东西没有实践过,今天突然想亲手做一做!。关于SQLIte的资料我就不多说了,网上都有。我自己也整理了一部分,基本上可以对SQLite有个全面的了解了。我这里就不废话了,直接上我自己的代码。

1:首先要先下载一个SQLite的C#开发的支持的东西。下载地址:sqllite下载地址:tp://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/SQLite-1.0.66.0-setup.exe/download

点击下载后,安装就行。(注意:安装的时候最好不要开着vs2008)

2:打开vs2008,新建一个winform应用程序

3: 打开“服务器资源管理器” 在这里右击“数据连接”---->添加连接 ------》更改 -----》更改数据源为:“SQLLite Database FIle“----->确定 ---->Browse选择你的数据库,(注意选择的文件一定是以后缀“.db”结束的,如果你还没建库,那么你就随便建一个以后缀为"db"结束的文件,放到你项目的bin目录的debug中(很重要,程序发布的路径)) 

我从网上当的一个SQLite helper 根本就用不成,经过我的修补终于可以用了。

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Configuration;
using System.Data;
using System.Data.SQLite;
namespace DAL
{public class SQLiteHelper{/// <summary>/// 获得连接对象/// </summary>/// <returns></returns>public static SQLiteConnection GetSQLiteConnection(){SQLiteConnection conn=new SQLiteConnection(@"data source=E:\SQliteTest\SQliteTest\bin\Debug\JxyDb.db");conn.SetPassword("123456");//数据库密码return conn;}private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p){if (conn.State != ConnectionState.Open){conn.Open();}cmd.Parameters.Clear();cmd.Connection = conn;cmd.CommandText = cmdText;cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 30;if (p != null){foreach (SQLiteParameter parm in p){cmd.Parameters.AddWithValue(parm.ParameterName, parm.Value);}}}public static DataSet ExecuteDataset(string cmdText, params object[] p){DataSet ds = new DataSet();SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);SQLiteDataAdapter da = new SQLiteDataAdapter(command);da.Fill(ds);}return ds;}public static DataRow ExecuteDataRow(string cmdText, params object[] p){DataSet ds = ExecuteDataset(cmdText, p);if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)return ds.Tables[0].Rows[0];return null;}/// <summary>/// 返回受影响的行数/// </summary>/// <param name="cmdText">a</param>/// <param name="commandParameters">传入的参数</param>/// <returns></returns>public static int ExecuteNonQuery(string cmdText, params object[] p){SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);return command.ExecuteNonQuery();}}/// <summary>/// 返回SqlDataReader对象/// </summary>/// <param name="cmdText"></param>/// <param name="commandParameters">传入的参数</param>/// <returns></returns>public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p){SQLiteCommand command = new SQLiteCommand();SQLiteConnection connection = GetSQLiteConnection();try{PrepareCommand(command, connection, cmdText, p);SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);return reader;}catch{connection.Close();throw;}}/// <summary>/// 返回结果集中的第一行第一列,忽略其他行或列/// </summary>/// <param name="cmdText"></param>/// <param name="commandParameters">传入的参数</param>/// <returns></returns>public static object ExecuteScalar(string cmdText, params object[] p){SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(cmd, connection, cmdText, p);return cmd.ExecuteScalar();}}/// <summary>/// 分页/// </summary>/// <param name="recordCount"></param>/// <param name="pageIndex"></param>/// <param name="pageSize"></param>/// <param name="cmdText"></param>/// <param name="countText"></param>/// <param name="p"></param>/// <returns></returns>public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p){if (recordCount < 0)recordCount = int.Parse(ExecuteScalar(countText, p).ToString());DataSet ds = new DataSet();SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);SQLiteDataAdapter da = new SQLiteDataAdapter(command);da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");}return ds;}/**//// <summary>/// 放回一个SQLiteParameter/// </summary>/// <param name="name">参数名字</param>/// <param name="type">参数类型</param>/// <param name="size">参数大小</param>/// <param name="value">参数值</param>/// <returns>SQLiteParameter的值</returns>public static  SQLiteParameter CreateSqliteParameter(string name, DbType type, int size, object value){SQLiteParameter parm = new SQLiteParameter(name, type, size);parm.Value = value;return parm;}}
} 

Winform的测试界面和代码如下。

 

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 SQliteTest
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button2_Click(object sender, EventArgs e){string Sqlstr = "INSERT INTO [Users] VALUES(@username,@mobile)";SQLiteParameter[] canshu = new SQLiteParameter[]{DAL.SQLiteHelper.CreateSqliteParameter("@username",DbType.String,50,this.textBox1.Text),DAL.SQLiteHelper.CreateSqliteParameter("@mobile",DbType.String,50,this.textBox2.Text)};DAL.SQLiteHelper.ExecuteNonQuery(Sqlstr, canshu);Bangding();}public void Bangding(){SQLiteParameter[] canshu1 = new SQLiteParameter[] { DAL.SQLiteHelper.CreateSqliteParameter("@id", DbType.Int32, 4, 1) };string Sqlstr = "select * from users";this.dataGridView1.DataSource = DAL.SQLiteHelper.ExecuteDataset(Sqlstr, canshu1).Tables[0];}}
}

 项目文件

 没有做性能测试,应该问题不大。 紧紧做入门,保存下来以便自己日后会用到。

 

 

C# 有没有自带数据库

C# 本身并不自带数据库‌,但C# 提供了与多种数据库交互的丰富API和工具,开发者可以使用这些工具与各种数据库系统如MySQL、SQL Server、Oracle等进行交互。

不过,在C#中可以使用一些内置的数据库选项,这些选项通常与应用程序一起打包和分发,适用于需要本地数据存储的场景。这些内置的数据库选项包括:

  1. ‌SQL Server Compact Edition (CE)‌:这是一个轻量级的数据库引擎,非常适合于桌面和移动应用程序。它提供了SQL Server的核心功能,但不需要复杂的安装和配置。
  2. ‌SQLite‌:SQLite是一个开源的嵌入式关系数据库,它不需要一个独立的服务器进程或操作系统支持。SQLite数据库是一个单一的文件,可以很容易地复制和分发。
  3. ‌LiteDB‌:LiteDB是一个用C#编写的开源NoSQL嵌入式数据库,它提供了类似于MongoDB的API,适用于需要快速开发和轻量级数据存储的场景。

这些内置的数据库选项可以在C#项目中轻松集成和使用,以满足应用程序的本地数据存储需求。

请注意,虽然这些数据库选项在C#项目中非常常见和实用,但它们并不是C#语言本身的一部分,而是作为第三方库或工具与C#一起使用。

C# 本身并不自带数据库,但它可以与多种数据库进行交互,包括但不限于 SQL Server, MySQL, SQLite, PostgreSQL 等。

如果你想要一个轻量级的数据库,可以使用 SQLite,它是一个嵌入式数据库,可以直接打包在应用程序中。

以下是一个使用 SQLite 的 C# 示例代码:

using System;
using System.Data.SQLite;class Program
{static void Main(){string connectionString = "Data Source=example.db;Version=3;";using (var connection = new SQLiteConnection(connectionString)){connection.Open();using (var command = new SQLiteCommand(connection)){command.CommandText = "CREATE TABLE IF NOT EXISTS people (id INTEGER PRIMARY KEY, name TEXT)";command.ExecuteNonQuery();}using (var command = new SQLiteCommand(connection)){command.CommandText = "INSERT INTO people (name) VALUES ('John Doe')";command.ExecuteNonQuery();}using (var command = new SQLiteCommand(connection)){command.CommandText = "SELECT id, name FROM people";using (var reader = command.ExecuteReader()){while (reader.Read()){Console.WriteLine($"ID: {reader["id"]}, Name: {reader["name"]}");}}}}}
}

这段代码演示了如何在 C# 中使用 SQLite 执行基本的数据库操作,包括创建表格、插入数据以及查询数据。在实际应用中,你需要确保已经安装了 SQLite,并且在项目中引用了 System.Data.SQLite 库。

C#中如何集成LiteDB

在C#中集成LiteDB的步骤如下:

  1. ‌安装LiteDB‌:

    • 通过NuGet包管理器来安装LiteDB。在Visual Studio中,右键点击你的项目,选择“管理 NuGet 程序包”,然后搜索“LiteDB”并点击“安装”。或者,你也可以使用 Package Manager Console 来安装,命令为 Install-Package LiteDB
  2. ‌定义数据模型‌:

    • 创建一个类来表示你的数据模型。这个类应该包含你需要存储的数据属性。例如,你可以定义一个 TranslItem 类来表示翻译项,其中包含 IdText 和 Trans 属性。
  3. ‌创建数据库和集合‌:

    • 使用 LiteDatabase 类来连接或创建数据库。LiteDB 会在你的应用程序路径下创建一个 .db 文件作为数据库。
    • 使用 GetCollection<T> 方法来获取或创建集合。这个集合用于存储你的数据模型实例。
  4. ‌执行CRUD操作‌:

    • 使用LiteDB提供的方法来处理增删查改(CRUD)操作。例如,使用 Insert 方法插入数据,使用 FindAll 或 Find 方法查询数据,使用 Update 方法更新数据,使用 Delete 方法删除数据。

以下是一个简单的示例代码,展示了如何在C#中使用LiteDB:

using LiteDB;public class TranslItem
{[BsonId]public int Id { get; set; }public string? Text { get; set; }public string? Trans { get; set; }
}class Program
{static void Main(string[] args){// 创建或连接数据库using (var db = new LiteDatabase("transldata.db")){// 获取或创建集合var transls = db.GetCollection<TranslItem>("transls");// 插入数据var tr = new TranslItem { Text = "Hello", Trans = "Hola" };transls.Insert(tr);// 查询数据var all = transls.FindAll();foreach (var item in all){Console.WriteLine($"Id: {item.Id}, Text: {item.Text}, Trans: {item.Trans}");}// 更新数据var itemToUpdate = transls.FindOne(x => x.Text == "Hello");if (itemToUpdate != null){itemToUpdate.Trans = "Bonjour";transls.Update(itemToUpdate);}// 删除数据
            transls.Delete(tr.Id);}}
}

在这个示例中,我们定义了一个 TranslItem 类来表示翻译项,然后连接到名为 "transldata.db" 的数据库,并获取或创建了一个名为 "transls" 的集合。接下来,我们演示了如何插入、查询、更新和删除数据。

请注意,这只是一个基本的示例,实际应用中你可能需要根据自己的需求进行更多的配置和优化。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863937.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust远程加载shellcode

学习rust, 练习写一个loader, 不足之处还请指教编写 隐藏黑框 在注释掉所有打印语句后编译运行还是会弹黑框, 解决方法是头部添加一行(指定 Rust 编译器生成的可执行文件为 Windows 子系统应用程序,而不是控制台应用程序): #![windows_subsystem = "windows"]‍ 反…

RustLoader

学习rust, 练习写一个loader, 不足之处还请指教编写 隐藏黑框 在注释掉所有打印语句后编译运行还是会弹黑框, 解决方法是头部添加一行(指定 Rust 编译器生成的可执行文件为 Windows 子系统应用程序,而不是控制台应用程序): #![windows_subsystem = "windows"]‍ 反…

机房轶事_2

机房轶事_2 之前 机房某同学的Luogu账号被另一个同学破解了密码,并且把头像改成了遗照(配花环)。 更过分的是,他居然将封面改成了教练的照片。

20241403《计算机基础与程序设计》课程总结

20241403《计算机基础与程序设计》课程总结 每周作业链接汇总 第一周作业: 【内容概要】课程概论第二周作业: 【内容概要】①数字化 ②信息安全 ③自学教材第三周作业: 【内容概要】①掌握门和电路 ②学习计算机部件 ③了解冯诺依曼体系结构 ④学习C语言基础知识,第四周作业…

AutoGeaconC2:一款一键读取Profile自动化生成geacon实现跨平台上线CobaltStrike

CobaltStrike是渗透测试中常用的一款基于C2框架的攻击工具。生成Windows payload也很方便。 但在CobaltStrike中如何上线Linux设备呢❓ AutoGeaconC2是一款一键读取Profile自动化生成geacon实现跨平台上线CobaltStrike。目前仅支持Linux amd64上线。 使用 首先下载releases中的…

Nginx-克隆备份虚拟机

克隆备份虚拟机 选中要备份的虚拟机 - 管理 - 克隆 开机状态下 没有办法克隆关机 init 0下一页克隆当前状态选择 创建链接克隆克隆名称 位置完成克隆

activiti6.0.0 二次开发兼容达梦数据库(亲测有效)

一、 前因 最近公司做数据库国产化,数据从MySql数据库中迁移到达梦(DM8),在迁移过程中,当迁移工作流(Activiti6.0.0)时,提换达梦(DM8)数据库驱动后启动过程报错: Caused by: org.activiti.engine.ActivitiException: couldnt deduct database type from database pr…

MYSQL中Join的用法.240430

1、笛卡尔积(没有加筛选条件的内连接) 两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。 mysql> select * from t1 join t2;或者 mysql> select * from t1 inner join t2;或者 mysql> select * from t1, t2;2、左连接 两表关联,左表全部保留,右表关联不…

idea左上角project一片绿的解决方法.240712

idea突然project底色一片绿,真的心里慌得一批。。解决方法: 打开File-Settings,按图示找到地方,关闭FileColor,即可。.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0…

PCS7 笔记

400H和410H400H系统属于老版本CPU,在售的越来愈少。410H作为400H的替代和更新产品出现。冗余机制同步周期同步 事件同步:在西门子400H/410H cpu中,两个CPU内部的数据,必须保持高度统一,属于西门子冗余PLC的专利,西门子冗余均为事件同步。在西门子400H/410H冗余PLC中,不推…

2024-2025-1 20241411王思棋《计算机基础与程序设计》课程总结

每周作业链接汇总 第一周作业:基于VirtualBox安装Ubuntu,从而安装Linux系统。快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题第二周作业:数字化、信息安全第三周作业:数字分类与计数法、位置计数法、进制…

Verilog2_硬件描述语言

Verilog内容总结2_硬件描述语言一、硬件描述语言概述 1.主要的硬件描述语言VHDL(VHSIC HDL): 天然支持并发描述,允许在同一个文件中定义多个并发执行的进程;可读性和可维护性较好,适合于大型项目和团队合作;支持用户定义的数据类型;可以使用抽象类型为系统建模 Verilog…