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#实现的简单随机数产生器功能示例

    下面我将为您详细讲解如何实现C#的随机数产生器功能示例。 1. 什么是随机数 随机数是指在一定范围内的数字,由于没有特定的规律和模式,所以看起来就像是随机产生的数字。在程序设计中,随机数被广泛应用于生成随机数据,加密算法,游戏开发等领域。 2. C#实现随机数产生器 在C#中,产生随机数可以使用Random类。下面是一个简单的示例,演示了如何使用Random…

    C# 2023年6月7日
    00
  • C#设计模式之观察者模式实例讲解

    C#设计模式之观察者模式实例讲解 概念介绍 观察者模式(Observer Pattern)是软件设计模式之一,它定义了对象之间的一种一对多的依赖关系,让多个观察者(Observers)对象同时监听某一个主题(Subject)对象。当这个主题对象的状态发生变化时,会通知所有观察者对象,使它们能够自动更新。 观察者模式中有两个重要的部分:Subject 主题和 …

    C# 2023年5月31日
    00
  • C#判断三角形的类型

    想要判断一个三角形的类型,我们需要知道它的三条边长。以下是判断三角形类型的完整攻略: 步骤一:获取三角形的边长 需要获取三角形三条边的长度,可以通过用户输入、数据库或者其他数据源来获得。在此示例中,我们假设有三个变量 a、b、c 分别存储三角形的三条边长。 步骤二:判断是否为三角形 要判断一个三角形的类型,首先需要确定它是否是三角形。三角形的判定规则是任意两…

    C# 2023年6月7日
    00
  • 详解WPF中的对象资源

    下面就详细讲解一下WPF中的对象资源的使用攻略。 局部对象资源 WPF中的局部对象资源是指在某个特定元素的范围内定义的资源,只有在该元素及其子元素中才能够访问到。局部对象资源可以使用x:Key属性进行引用。 下面是一个局部对象资源的示例: <Window x:Class="WpfApp1.MainWindow" xmlns=&quo…

    C# 2023年6月1日
    00
  • 如何用C#获取计算机详细的软件和硬件信息

    当使用C#语言编写桌面应用程序时,有时需要获取计算机的详细软硬件信息,例如操作系统、处理器、内存、硬盘、显卡、声卡等信息。本文将为您提供一份完整攻略,介绍如何使用C#获取计算机的诸多硬件和软件信息。 第一步:导入必要的命名空间 首先,我们需要使用以下命名空间来访问相关API: using System.Management; //用于WMI操作 using …

    C# 2023年6月6日
    00
  • C# double类型变量比较分析

    这里是关于C# double类型变量比较的完整攻略。 为什么比较double类型变量需要特别注意? 在C#中,double类型变量表示双精度浮点数,其存储方式采用IEEE标准中的64位浮点数格式。由于计算机内部对于数值的存储,通常都采用二进制存储而非十进制,这就意味着对于一些十进制的浮点数,在转换成二进制的过程中,可能会出现精度损失。因此,在比较double…

    C# 2023年6月6日
    00
  • C#实现简单订单管理程序

    C#实现简单订单管理程序攻略 订单管理程序是一个基本的软件开发任务,通过它我们可以练习C#类和对象,掌握基本的输入输出、判断和运算等编程技巧。下面将详细讲解如何使用C#实现一个简单的订单管理程序。 步骤一:定义订单类 首先,我们需要定义一个订单类,用于表示一个订单。订单有一个唯一的标识符、一个客户信息、一个订单日期以及一组订单项。定义订单类的代码如下: pu…

    C# 2023年6月6日
    00
  • asp.net 生成静态页时的进度条显示

    为了实现在 ASP.NET 生成静态页时显示进度条,需要实现以下步骤: 添加一个 WebForm 页面,用于显示进度条并更新进度。这个页面可以使用 AJAX 技术,在不刷新整个页面的情况下更新进度条。 在生成静态页的代码中,添加一个事件来通知页面更新进度。这个事件可以使用委托来定义,让生成静态页的代码在执行过程中调用委托,传递当前的进度值给页面。 在生成静态…

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