最近,看到一个软件,软件是使用的内嵌数据库。我对这个东西没有实践过,今天突然想亲手做一做!。关于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# 提供了与多种数据库交互的丰富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);}} }