我们将一起学习如何使用C#操作MySQL数据库。在现代软件开发中,数据库是不可或缺的组成部分,而能够有效地与数据库沟通无疑是每个开发者都应该具备的技能。为了让这个过程变得简单而高效,我们将创建一个名为MySQLDatabaseHelper
的工具类,让它成为我们的数据库操作小帮手。
在此之前,请确保你的开发环境中已经安装了MySql.Data
包,这是官方的MySQL .NET Connector。你可以使用NuGet包管理器来安装它。下面,让我们开始我们的探索之旅吧!
MySQLDatabaseHelper类
using System;
using System.Data;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using System.Threading.Tasks;
public class MySQLDatabaseHelper
{
// 我们的数据库连接字符串,它将告诉我们如何连接到数据库服务器
private readonly string _connectionString;
// 类构造函数,需要一个连接字符串参数
public MySQLDatabaseHelper(string connectionString)
{
// 如果没有提供连接字符串,那将抛出一个异常
_connectionString = connectionString ?? throw new ArgumentNullException(nameof(connectionString), "数据库连接字符串不能为空!");
}
// 异步查询函数,返回一个DataTable
// sql: SQL查询字符串
// parameters (可选): SQL参数字典,用于参数化查询,增强安全性
public async Task<DataTable> ExecuteQueryAsync(string sql, IDictionary<string, object> parameters = null)
{
// 创建一个新的数据库连接实例
using var conn = new MySqlConnection(_connectionString);
// 打开数据库连接
await conn.OpenAsync();
// 创建一个新的数据库命令实例
using var cmd = new MySqlCommand(sql, conn);
// 如果存在参数,将它们添加到命令中
if (parameters != null)
{
foreach (var param in parameters)
{
cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value);
}
}
// 创建一个新的数据表实例,它将包含查询结果
var dataTable = new DataTable();
// 使用适配器填充数据表
using var adapter = new MySqlDataAdapter(cmd);
adapter.Fill(dataTable);
// 返回填充好的数据表
return dataTable;
}
// 异步执行非查询SQL命令
// 返回影响的行数,例如在INSERT、UPDATE或DELETE操作中
public async Task<int> ExecuteNonQueryAsync(string sql, IDictionary<string, object> parameters = null)
{
// 同上,创建数据库连接和命令
using var conn = new MySqlConnection(_connectionString);
await conn.OpenAsync();
using var cmd = new MySqlCommand(sql, conn);
// 添加参数到命令
if (parameters != null)
{
foreach (var param in parameters)
{
cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value);
}
}
// 执行命令并返回影响的行数
return await cmd.ExecuteNonQueryAsync();
}
}
详细注释
- 连接字符串:这是连接到MySQL数据库的关键信息,包含了服务器地址、用户名、密码、数据库名等。
- 构造函数:确保在创建
MySQLDatabaseHelper
实例时,我们有一个有效的连接字符串。 - ExecuteQueryAsync:一个异步方法,执行SQL查询并以
DataTable
的形式返回结果,方便在C#中操作。 - ExecuteNonQueryAsync:这个异步方法执行非查询类型的SQL命令,如更改或删除数据,并返回受影响的行数,让我们知道操作的结果。
使用MySQLDatabaseHelper
一旦我们有了这个工具类,使用它来与数据库交云增删改查就变得非常简单:
// 创建一个MySQLDatabaseHelper实例
var dbHelper = new MySQLDatabaseHelper("你的MySQL连接字符串");
// 用它来异步执行一个查询
var usersTable = await dbHelper.ExecuteQueryAsync("SELECT * FROM users WHERE age > @age", new Dictionary<string, object> { { "@age", 18 } });
// 或者用它来异步执行一个插入命令
int affectedRows = await dbHelper.ExecuteNonQueryAsync("INSERT INTO users (name, age) VALUES (@name, @age)", new Dictionary<string, object> { { "@name", "John Doe" }, { "@age", 25 } });
实际使用时,连接字符串记得写到配置文件里。