0%

SQLite轻量级嵌入式数据库在C#中的应用

🌟 引言

嘿,小伙伴们!今天我们要来聊聊SQLite,一个超轻量级的嵌入式数据库,它不需要独立的服务器进程,也不需要安装任何东西,只需要将SQLite的DLL文件添加到项目中即可开始使用。SQLite非常适合用于小型应用程序,尤其是那些需要在客户端存储数据的应用程序。今天,我们就一起来看看如何在C#中使用SQLite吧!🌟

📚 背景知识

SQLite是一个跨平台的数据库,它可以运行在Windows、Linux、Mac OS X等多个操作系统上。它支持SQL语言标准,并且具有事务处理、触发器等功能。SQLite非常适合那些需要简单数据存储的应用程序,比如桌面应用、移动应用等。💡

🛠️ 准备工作

在开始之前,我们需要准备以下内容:

1
2
安装SQLite:下载SQLite的预编译二进制文件,并将其添加到项目的引用中。
安装NuGet包:使用NuGet包管理器安装System.Data.SQLite。

接下来,让我们一步步来看如何在C#中使用SQLite。🛠️

📖 安装SQLite

📚 基础知识

SQLite可以通过NuGet包管理器轻松安装。

📝 代码实践

打开Visual Studio,创建一个新的C#控制台应用程序。然后,在解决方案资源管理器中右键点击项目,选择“管理 NuGet 包”。

在NuGet包管理器中,搜索System.Data.SQLite并安装。

1
2
3
// 这段代码不需要实际运行,只是为了说明如何安装NuGet包
// 使用NuGet包管理器安装System.Data.SQLite
// 在解决方案资源管理器中右键点击项目 -> 管理 NuGet 包 -> 浏览 -> 搜索 System.Data.SQLite -> 安装

📋 结尾总结

安装SQLite非常简单,只需要几步操作即可完成。

📖 创建数据库

📚 基础知识

在C#中,我们可以使用System.Data.SQLite命名空间中的类来创建和操作SQLite数据库。

📝 代码实践

创建一个新的SQLite数据库,并定义一个表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
// 创建一个SQLite连接字符串
string connectionString = "Data Source=mydatabase.db;Version=3;";

// 使用SQLiteConnection类建立连接
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
// 打开连接
connection.Open();

// 创建一个SQLiteCommand对象
using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:创建一个名为Users的表
string createTableSql = @"
CREATE TABLE IF NOT EXISTS Users (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL,
Email TEXT NOT NULL UNIQUE
);";

// 执行SQL语句
command.CommandText = createTableSql;
command.ExecuteNonQuery();
}
}

Console.WriteLine("Database and table created successfully!");
}
}

📋 结尾总结

我们创建了一个名为mydatabase.db的SQLite数据库,并在其中创建了一个名为Users的表。

📖 插入数据

📚 基础知识

我们可以使用INSERT INTO语句向表中插入数据。

📝 代码实践

向Users表中插入一些数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:向Users表中插入一条记录
string insertSql = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email);";

// 设置参数
command.Parameters.AddWithValue("@Name", "Alice");
command.Parameters.AddWithValue("@Email", "alice@example.com");

// 执行SQL语句
command.CommandText = insertSql;
command.ExecuteNonQuery();

// 清除参数
command.Parameters.Clear();

// 再次插入一条记录
command.Parameters.AddWithValue("@Name", "Bob");
command.Parameters.AddWithValue("@Email", "bob@example.com");
command.ExecuteNonQuery();
}
}

Console.WriteLine("Data inserted successfully!");
}
}

📋 结尾总结

我们成功地向Users表中插入了两条记录。

📖 查询数据

📚 基础知识

我们可以使用SELECT语句从表中查询数据。

📝 代码实践

从Users表中查询所有记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中的所有记录
string selectSql = "SELECT * FROM Users;";

// 执行SQL语句
command.CommandText = selectSql;
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string email = reader.GetString(2);

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}
}

📋 结尾总结

我们成功地从Users表中查询了所有记录。

📖 更新数据

📚 基础知识

我们可以使用UPDATE语句来更新表中的数据。

📝 代码实践

更新Users表中的某条记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:更新Users表中ID为1的记录
string updateSql = "UPDATE Users SET Email = @Email WHERE Id = @Id;";

// 设置参数
command.Parameters.AddWithValue("@Email", "alice.smith@example.com");
command.Parameters.AddWithValue("@Id", 1);

// 执行SQL语句
command.CommandText = updateSql;
int rowsAffected = command.ExecuteNonQuery();

Console.WriteLine($"{rowsAffected} row(s) updated.");
}
}
}
}

📋 结尾总结

我们成功地更新了Users表中的某条记录。

📖 删除数据

📚 基础知识

我们可以使用DELETE语句来删除表中的数据。

📝 代码实践

从Users表中删除某条记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:删除Users表中ID为2的记录
string deleteSql = "DELETE FROM Users WHERE Id = @Id;";

// 设置参数
command.Parameters.AddWithValue("@Id", 2);

// 执行SQL语句
command.CommandText = deleteSql;
int rowsAffected = command.ExecuteNonQuery();

Console.WriteLine($"{rowsAffected} row(s) deleted.");
}
}
}
}

📋 结尾总结

我们成功地从Users表中删除了一条记录。

📖 事务处理

📚 基础知识

SQLite支持事务处理,我们可以使用BEGIN TRANSACTION、COMMIT和ROLLBACK来管理事务。

📝 代码实践

在事务中执行一系列操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

// 开始事务
SQLiteTransaction transaction = connection.BeginTransaction();

try
{
using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:插入一条记录
string insertSql = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email);";

// 设置参数
command.Parameters.AddWithValue("@Name", "Charlie");
command.Parameters.AddWithValue("@Email", "charlie@example.com");

// 执行SQL语句
command.Transaction = transaction;
command.CommandText = insertSql;
command.ExecuteNonQuery();

// 清除参数
command.Parameters.Clear();

// 再次插入一条记录
command.Parameters.AddWithValue("@Name", "Diana");
command.Parameters.AddWithValue("@Email", "diana@example.com");
command.ExecuteNonQuery();

// 提交事务
transaction.Commit();
}
}
catch (Exception ex)
{
// 如果发生异常,则回滚事务
transaction.Rollback();
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
}

📋 结尾总结

我们成功地在一个事务中插入了两条记录。

📖 使用SQLiteDataReader

📚 基础知识

SQLiteDataReader是一个用于读取从数据库中检索的数据的对象。

📝 代码实践

使用SQLiteDataReader来读取数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中的所有记录
string selectSql = "SELECT * FROM Users;";

// 执行SQL语句
command.CommandText = selectSql;
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string email = reader.GetString(2);

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}
}

📋 结尾总结

我们成功地使用SQLiteDataReader读取了Users表中的所有记录。

📖 使用SQLiteDataAdapter

📚 基础知识

SQLiteDataAdapter是一个用于填充DataTable和更新数据库的适配器。

📝 代码实践

使用SQLiteDataAdapter填充DataTable。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中的所有记录
string selectSql = "SELECT * FROM Users;";

// 创建一个SQLiteDataAdapter
SQLiteDataAdapter adapter = new SQLiteDataAdapter(selectSql, connection);

// 创建一个DataTable
DataTable dataTable = new DataTable();

// 使用SQLiteDataAdapter填充DataTable
adapter.Fill(dataTable);

// 遍历DataTable中的数据
foreach (DataRow row in dataTable.Rows)
{
int id = (int)row["Id"];
string name = (string)row["Name"];
string email = (string)row["Email"];

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}

📋 结尾总结

我们成功地使用SQLiteDataAdapter填充了一个DataTable。

📖 使用SQLiteCommandBuilder

📚 基础知识

SQLiteCommandBuilder用于根据SQLiteDataAdapter中的DataTable自动生成INSERT、UPDATE和DELETE命令。

📝 代码实践

使用SQLiteCommandBuilder生成命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中的所有记录
string selectSql = "SELECT * FROM Users;";

// 创建一个SQLiteDataAdapter
SQLiteDataAdapter adapter = new SQLiteDataAdapter(selectSql, connection);

// 创建一个SQLiteCommandBuilder
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);

// 创建一个DataTable
DataTable dataTable = new DataTable();

// 使用SQLiteDataAdapter填充DataTable
adapter.Fill(dataTable);

// 添加一条新记录
DataRow newRow = dataTable.NewRow();
newRow["Name"] = "Eve";
newRow["Email"] = "eve@example.com";
dataTable.Rows.Add(newRow);

// 更新数据库
adapter.Update(dataTable);
}
}
}
}

📋 结尾总结

我们成功地使用SQLiteCommandBuilder生成了INSERT、UPDATE和DELETE命令。

📖 使用SQLiteConnectionStringBuilder

📚 基础知识

SQLiteConnectionStringBuilder用于构建连接字符串。

📝 代码实践

使用SQLiteConnectionStringBuilder构建连接字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
// 使用SQLiteConnectionStringBuilder构建连接字符串
SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder
{
DataSource = "mydatabase.db",
Version = 3
};

string connectionString = builder.ToString();

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中的所有记录
string selectSql = "SELECT * FROM Users;";

// 执行SQL语句
command.CommandText = selectSql;
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string email = reader.GetString(2);

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}
}

📋 结尾总结

我们成功地使用SQLiteConnectionStringBuilder构建了一个连接字符串。

📖 使用SQLiteParameter

📚 基础知识

SQLiteParameter用于向SQL命令传递参数。

📝 代码实践

使用SQLiteParameter传递参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中Email为某个值的记录
string selectSql = "SELECT * FROM Users WHERE Email = @Email;";

// 设置参数
SQLiteParameter emailParam = new SQLiteParameter("@Email", DbType.String);
emailParam.Value = "alice.smith@example.com";

// 添加参数
command.Parameters.Add(emailParam);

// 执行SQL语句
command.CommandText = selectSql;
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string email = reader.GetString(2);

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}
}

📋 结尾总结

我们成功地使用SQLiteParameter传递了一个参数。

📖 使用SQLiteException

📚 基础知识

SQLiteException用于捕获和处理SQLite相关的异常。

📝 代码实践

捕获并处理SQLiteException。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

try
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中不存在的记录
string selectSql = "SELECT * FROM Users WHERE Id = @Id;";

// 设置参数
SQLiteParameter idParam = new SQLiteParameter("@Id", DbType.Int32);
idParam.Value = 999;

// 添加参数
command.Parameters.Add(idParam);

// 执行SQL语句
command.CommandText = selectSql;
using (SQLiteDataReader reader = command.ExecuteReader())
{
if (!reader.HasRows)
{
Console.WriteLine("No data found.");
}
else
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string email = reader.GetString(2);

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}
}
catch (SQLiteException ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}

📋 结尾总结

我们成功地捕获并处理了一个SQLiteException。

📖 使用SQLiteBulkCopy

📚 基础知识

SQLiteBulkCopy用于批量复制数据。

📝 代码实践

使用SQLiteBulkCopy批量插入数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

// 创建一个SQLiteBulkCopy对象
using (SQLiteBulkCopy bulkCopy = new SQLiteBulkCopy(connection))
{
// 设置表名
bulkCopy.DestinationTableName = "Users";

// 创建一个DataTable
DataTable dataTable = new DataTable();

// 添加列
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Email", typeof(string));

// 添加行
for (int i = 0; i < 100; i++)
{
dataTable.Rows.Add(i + 1, $"User{i}", $"user{i}@example.com");
}

// 执行批量复制
bulkCopy.WriteToServer(dataTable);
}
}

Console.WriteLine("Data bulk copied successfully!");
}
}

📋 结尾总结

我们成功地使用SQLiteBulkCopy批量插入了数据。

📖 使用SQLiteConnectionPooling

📚 基础知识

SQLite支持连接池,这可以提高性能。

📝 代码实践

使用连接池。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Data;
using System.Data.SQLite;

class Program
{
static void Main()
{
string connectionString = "Data Source=mydatabase.db;Version=3;Pooling=true;Max Pool Size=100;";

using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();

using (SQLiteCommand command = new SQLiteCommand(connection))
{
// SQL语句:查询Users表中的所有记录
string selectSql = "SELECT * FROM Users;";

// 执行SQL语句
command.CommandText = selectSql;
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
string email = reader.GetString(2);

Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
}
}
}
}
}

📋 结尾总结

我们成功地使用了连接池。

📖 结束语

小伙伴,恭喜你走完了SQLite在C#中的应用之旅!通过今天的分享,相信你已经掌握了如何在C#中使用SQLite,让它为你的应用程序提供数据存储服务。如果你有任何疑问或者想要了解更多内容,欢迎随时提问!我们一起探索更多好玩的技术吧!🌟

希望今天的分享对你有所帮助,期待你下次再来探索更多的技术乐趣!🌈
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/z_344791576/article/details/140813318