🌟 引言 嘿,小伙伴们!今天我们要来聊聊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 并安装。
📋 结尾总结 安装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