C#操作SQLite方法实例详解

操作SQLite数据库(C#

SQLite是一款轻量级的关系型数据库,它不需要安装数据库服务器,只需要在应用程序中引用相关的库文件即可。在C#中,我们可以使用SQLite来操作数据库,实现数据的存储和管理。

本文将详细讲解如何在C#中操作SQLite,包括数据库连接、插入、更新、删除、查询等基本操作。

1. 引用SQLite库文件

我们可以通过Nuget包管理器来引用SQLite库文件,在Visual Studio中右键点击项目名称,选择“管理NuGet程序包”,在搜索框中输入“SQLite”,选择“System.Data.SQLite.Core”进行安装。

2. 创建数据库连接

使用SQLite操作数据库时,需要先创建数据库连接对象。可以使用以下代码创建连接对象:

using System.Data.SQLite;

string connectionString = "Data Source=mydatabase.db;Version=3;";
SQLiteConnection connection = new SQLiteConnection(connectionString);

其中,mydatabase.db为数据库文件名,如果文件不存在,则会自动创建一个新的数据库文件;Version=3表示使用SQLite 3版本的数据库。

3. 执行SQL语句

在创建连接对象后,可以使用SQLiteCommand对象执行SQL语句。以下是一个示例:

using System.Data.SQLite;

string connectionString = "Data Source=mydatabase.db;Version=3;";
SQLiteConnection connection = new SQLiteConnection(connectionString);
connection.Open();

string sql = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";
SQLiteCommand command = new SQLiteCommand(sql, connection);
command.ExecuteNonQuery();

connection.Close();

以上代码创建了一个名为“students”的表,包含三个字段:id(自增长的整数)、name(字符串类型)、age(整数类型)。

4. 插入数据

可以使用以下代码向上面创建的“students”表中插入一条数据:

using System.Data.SQLite;

string connectionString = "Data Source=mydatabase.db;Version=3;";
SQLiteConnection connection = new SQLiteConnection(connectionString);
connection.Open();

string sql = "INSERT INTO students (name, age) VALUES ('Tom', 20)";
SQLiteCommand command = new SQLiteCommand(sql, connection);
command.ExecuteNonQuery();

connection.Close();

5. 更新数据

可以使用以下代码更新“students”表中id为1的数据:

using System.Data.SQLite;

string connectionString = "Data Source=mydatabase.db;Version=3;";
SQLiteConnection connection = new SQLiteConnection(connectionString);
connection.Open();

string sql = "UPDATE students SET name='Jerry', age=22 WHERE id=1";
SQLiteCommand command = new SQLiteCommand(sql, connection);
command.ExecuteNonQuery();

connection.Close();

6. 删除数据

可以使用以下代码删除“students”表中id为1的数据:

using System.Data.SQLite;

string connectionString = "Data Source=mydatabase.db;Version=3;";
SQLiteConnection connection = new SQLiteConnection(connectionString);
connection.Open();

string sql = "DELETE FROM students WHERE id=1";
SQLiteCommand command = new SQLiteCommand(sql, connection);
command.ExecuteNonQuery();

connection.Close();

7. 查询数据

可以使用以下代码查询“students”表中所有数据:

using System.Data.SQLite;

string connectionString = "Data Source=mydatabase.db;Version=3;";
SQLiteConnection connection = new SQLiteConnection(connectionString);
connection.Open();

string sql = "SELECT * FROM students";
SQLiteCommand command = new SQLiteCommand(sql, connection);
SQLiteDataReader reader = command.ExecuteReader();

while (reader.Read())
{
    int id = Convert.ToInt32(reader["id"]);
    string name = reader["name"].ToString();
    int age = Convert.ToInt32(reader["age"]);
}

connection.Close();

以上代码查询“students”表中的所有数据,并依次读取每条数据的id、name和age字段。

示例1:使用SQLite实现简单的账户管理系统

我们可以使用SQLite实现一个简单的账户管理系统,包含注册、登录和修改密码功能。

using System;
using System.Data.SQLite;

public class User
{
    public int Id { get; set; }

    public string Username { get; set; }

    public string Password { get; set; }

    public void Save()
    {
        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = $"INSERT INTO users (username, password) VALUES ('{Username}', '{Password}')";
            SQLiteCommand command = new SQLiteCommand(sql, connection);
            command.ExecuteNonQuery();
        }
    }

    public static User FindByUsernameAndPassword(string username, string password)
    {
        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = $"SELECT * FROM users WHERE username='{username}' AND password='{password}'";
            SQLiteCommand command = new SQLiteCommand(sql, connection);
            SQLiteDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                User user = new User
                {
                    Id = Convert.ToInt32(reader["id"]),
                    Username = reader["username"].ToString(),
                    Password = reader["password"].ToString()
                };
                return user;
            }
            return null;
        }
    }

    public static void UpdatePassword(int id, string newPassword)
    {
        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = $"UPDATE users SET password='{newPassword}' WHERE id={id}";
            SQLiteCommand command = new SQLiteCommand(sql, connection);
            command.ExecuteNonQuery();
        }
    }
}

// 注册新用户
User user = new User
{
    UserName = "Tom",
    Password = "123456"
};
user.Save();

// 登录
User loginUser = User.FindByUsernameAndPassword("Tom", "123456");

// 修改密码
User.UpdatePassword(loginUser.Id, "654321");

以上代码创建了一个User类来管理数据库中的users表。其中,Save方法用于新增用户,FindByUsernameAndPassword方法用于根据用户名和密码查找用户,UpdatePassword方法用于修改用户密码。

示例2:使用SQLite实现银行转账系统

我们可以使用SQLite实现一个简单的银行转账系统,包含转账、查看余额和查看交易记录功能。

using System;
using System.Data.SQLite;

public class Account
{
    public int Id { get; set; }

    public string AccountNumber { get; set; }

    public decimal Balance { get; set; }

    public void Save()
    {
        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = $"INSERT INTO accounts (account_number, balance) VALUES ('{AccountNumber}', {Balance})";
            SQLiteCommand command = new SQLiteCommand(sql, connection);
            command.ExecuteNonQuery();
        }
    }

    public static Account FindByAccountNumber(string accountNumber)
    {
        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = $"SELECT * FROM accounts WHERE account_number='{accountNumber}'";
            SQLiteCommand command = new SQLiteCommand(sql, connection);
            SQLiteDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Account account = new Account
                {
                    Id = Convert.ToInt32(reader["id"]),
                    AccountNumber = reader["account_number"].ToString(),
                    Balance = Convert.ToDecimal(reader["balance"])
                };
                return account;
            }
            return null;
        }
    }

    public void Transfer(Account target, decimal amount)
    {
        if (Balance < amount)
        {
            Console.WriteLine("余额不足!");
            return;
        }

        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            SQLiteTransaction transaction = connection.BeginTransaction();

            try
            {
                Balance -= amount;
                string sql1 = $"UPDATE accounts SET balance={Balance} WHERE id={Id}";
                SQLiteCommand command1 = new SQLiteCommand(sql1, connection);
                command1.ExecuteNonQuery();

                target.Balance += amount;
                string sql2 = $"UPDATE accounts SET balance={target.Balance} WHERE id={target.Id}";
                SQLiteCommand command2 = new SQLiteCommand(sql2, connection);
                command2.ExecuteNonQuery();

                transaction.Commit();

                string sql3 = $"INSERT INTO transactions (from_account, to_account, amount) VALUES ({Id}, {target.Id}, {amount})";
                SQLiteCommand command3 = new SQLiteCommand(sql3, connection);
                command3.ExecuteNonQuery();

                Console.WriteLine($"转账成功,转出{amount:N2}元,余额{Balance:N2}元");
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                Console.WriteLine($"转账失败:{ex.Message}");
            }
        }
    }

    public void ShowBalance()
    {
        Console.WriteLine($"账户余额为{Balance:N2}元");
    }

    public void ShowTransactions()
    {
        string connectionString = "Data Source=mydatabase.db;Version=3;";
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();

            string sql = $"SELECT * FROM transactions WHERE from_account={Id} OR to_account={Id}";
            SQLiteCommand command = new SQLiteCommand(sql, connection);
            SQLiteDataReader reader = command.ExecuteReader();

            Console.WriteLine($"账户交易记录:");
            while (reader.Read())
            {
                int fromAccount = Convert.ToInt32(reader["from_account"]);
                int toAccount = Convert.ToInt32(reader["to_account"]);
                decimal amount = Convert.ToDecimal(reader["amount"]);
                DateTime createTime = Convert.ToDateTime(reader["create_time"]);

                if (fromAccount == Id)
                {
                    Console.WriteLine($"转出{amount:N2}元,到账户{toAccount},时间:{createTime}");
                }
                else
                {
                    Console.WriteLine($"收入{amount:N2}元,来自账户{fromAccount},时间:{createTime}");
                }
            }
        }
    }
}

// 创建账户
Account account1 = new Account
{
    AccountNumber = "10001",
    Balance = 10000
};
account1.Save();

Account account2 = new Account
{
    AccountNumber = "10002",
    Balance = 20000
};
account2.Save();

// 转账
account1.Transfer(account2, 5000);

// 查看余额
account1.ShowBalance();
account2.ShowBalance();

// 查看交易记录
account1.ShowTransactions();
account2.ShowTransactions();

以上代码创建了一个Account类来管理数据库中的accounts表和transactions表。其中,Save方法用于新增账户,FindByAccountNumber方法用于根据账号查找账户,Transfer方法用于转账,ShowBalance方法用于查看余额,ShowTransactions方法用于查看交易记录。

总结

使用SQLite操作数据库可以方便快捷地实现数据的存储和管理。本文介绍了在C#中如何使用SQLite,包括创建连接、执行SQL语句、插入、更新、删除、查询数据等基本操作。我们也通过两个示例,了解了如何使用SQLite实现简单的账户管理系统和银行转账系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#操作SQLite方法实例详解 - Python技术站

(3)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#解析Lrc歌词文件过程详解

    下面是“C#解析Lrc歌词文件过程详解”的完整攻略。 1. 前言 Lrc歌词文件是一种常见的音乐歌词格式,它具有简单易读、易修正等特点。对于一些音乐播放器而言,能够解析Lrc歌词文件,就可以在播放音乐的同时显示相应的歌词,让用户更方便地进行歌曲欣赏。因此,Lrc歌词文件的解析也成为一种常见的编程需求。 本文将详细讲解利用C#编程语言解析Lrc歌词文件的过程,…

    C# 2023年5月15日
    00
  • C#实现的简单整数四则运算计算器功能示例

    下面我来详细讲解“C#实现的简单整数四则运算计算器功能示例”的完整攻略。 一、搭建开发环境 首先我们需要搭建C#开发环境,可以选择安装Visual Studio或者VSCode。在安装完相应的开发工具后,我们需要创建一个控制台应用程序。 二、思路分析 在实现一个简单的整数四则运算计算器功能示例时,需要以下几个主要步骤: 读取用户输入的整数和运算符号; 根据运…

    C# 2023年6月7日
    00
  • C#根据身份证号码判断出生日期和性别

    C# 根据身份证号码判断出生日期和性别 步骤1:获取身份证号码的输入 在 C# 中,我们可以通过 Console.ReadLine() 方法获取用户输入的身份证号码。示例代码如下: Console.WriteLine("请输入身份证号码:"); string idCard = Console.ReadLine(); 步骤2:校验身份证号码…

    C# 2023年6月1日
    00
  • C#泛型和反射实例解析

    C#泛型和反射实例解析 在C#中,泛型和反射是两个非常重要的概念。泛型可以让我们编写高度通用的代码,而反射则可以让我们在运行时动态地获取类型信息和调用方法,非常适合特定的场景。本文将针对泛型和反射进行实例分析,为大家介绍它们的具体用法和场景。 泛型实例解析 1.泛型基本语法 泛型是C#4.0及以上版本的新特性。它能够在定义类、结构体、接口、方法等时,指定数据…

    C# 2023年5月31日
    00
  • C# 9.0 特性全面总结

    C#9.0特性全面总结 引言 C#9.0 是微软在2020年末发布的最新版本,该版本引入了许多新特性,包括简化模式匹配、针对记录类型(record types)的语言支持、简化的异步流编程模型等等。本文将对C#9.0的新特性进行全面总结,并提供相应的示例代码。 最佳实践 简化模式匹配 引入 C# 6.0 引入了模式匹配,以更简洁、更可读的方式处理各种情况。C…

    C# 2023年5月15日
    00
  • .net发送邮件实现代码

    下面是 “.NET发送邮件实现代码” 的完整攻略: 步骤一:导入命名空间 在代码中使用邮件发送的功能,需要导入命名空间System.Net.Mail。在C#代码中,可以使用以下语句导入: using System.Net.Mail; 步骤二:创建MailMessage对象 在邮件发送前,需要创建一个MailMessage对象,并设置其属性值,包括收件人、发件…

    C# 2023年5月31日
    00
  • 探秘C# 6.0 的新特性

    探秘C#6.0的新特性 C#6.0引入了一些新的语言特性,包括空值合并运算符、字符串插值、使用表达式的属性和方法、异常筛选、静态using、自动属性初始化器等。本篇文章将逐一详细介绍这些新特性。 空值合并运算符 空值合并运算符(??),是一个二元运算符,如果左操作数为空,则返回右操作数,否则返回左操作数。 示例: int? x = null; int y =…

    C# 2023年5月15日
    00
  • C#实现谷歌翻译API示例代码

    下面我将详细讲解“C#实现谷歌翻译API示例代码”的完整攻略。 1. 确定使用的开发工具和翻译API 首先,我们需要确定使用的开发工具和翻译API。C#是微软公司推出的一种面向对象的编程语言,而谷歌翻译API是由谷歌公司提供的一种机器翻译服务。 2. 注册谷歌翻译API并获取API密钥 在使用谷歌翻译API之前,我们需要先注册一个开发者账号,并获取一个API…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部