最近,看到一个软件,软件是使用的内嵌数据库。我对这个东西没有实践过,今天突然想亲手做一做!。关于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#中可以使用一些内置的数据库选项,这些选项通常与应用程序一起打包和分发,适用于需要本地数据存储的场景。这些内置的数据库选项包括:
- SQL Server Compact Edition (CE):这是一个轻量级的数据库引擎,非常适合于桌面和移动应用程序。它提供了SQL Server的核心功能,但不需要复杂的安装和配置。
- SQLite:SQLite是一个开源的嵌入式关系数据库,它不需要一个独立的服务器进程或操作系统支持。SQLite数据库是一个单一的文件,可以很容易地复制和分发。
- 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的步骤如下:
-
安装LiteDB:
- 通过NuGet包管理器来安装LiteDB。在Visual Studio中,右键点击你的项目,选择“管理 NuGet 程序包”,然后搜索“LiteDB”并点击“安装”。或者,你也可以使用 Package Manager Console 来安装,命令为
Install-Package LiteDB
。
- 通过NuGet包管理器来安装LiteDB。在Visual Studio中,右键点击你的项目,选择“管理 NuGet 程序包”,然后搜索“LiteDB”并点击“安装”。或者,你也可以使用 Package Manager Console 来安装,命令为
-
定义数据模型:
- 创建一个类来表示你的数据模型。这个类应该包含你需要存储的数据属性。例如,你可以定义一个
TranslItem
类来表示翻译项,其中包含Id
、Text
和Trans
属性。
- 创建一个类来表示你的数据模型。这个类应该包含你需要存储的数据属性。例如,你可以定义一个
-
创建数据库和集合:
- 使用
LiteDatabase
类来连接或创建数据库。LiteDB 会在你的应用程序路径下创建一个.db
文件作为数据库。 - 使用
GetCollection<T>
方法来获取或创建集合。这个集合用于存储你的数据模型实例。
- 使用
-
执行CRUD操作:
- 使用LiteDB提供的方法来处理增删查改(CRUD)操作。例如,使用
Insert
方法插入数据,使用FindAll
或Find
方法查询数据,使用Update
方法更新数据,使用Delete
方法删除数据。
- 使用LiteDB提供的方法来处理增删查改(CRUD)操作。例如,使用
以下是一个简单的示例代码,展示了如何在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" 的集合。接下来,我们演示了如何插入、查询、更新和删除数据。
请注意,这只是一个基本的示例,实际应用中你可能需要根据自己的需求进行更多的配置和优化。
标签:内嵌,SQLite,C#,数据库,System,command,using,new From: https://www.cnblogs.com/tyxajh/p/18652149