C# 编写 MySQL 自定义存储过程、触发器与函数的方法

2025-01-14 21:08:16   小编

C# 编写 MySQL 自定义存储过程、触发器与函数的方法

在开发基于 MySQL 数据库的应用程序时,C# 开发者常常需要运用自定义存储过程、触发器与函数来优化数据库操作。这些特性不仅能提高数据库的处理效率,还能增强数据的完整性和一致性。

自定义存储过程

存储过程是一组预编译的 SQL 语句集合,它可以接收参数、执行操作并返回结果。在 C# 中调用 MySQL 存储过程,首先要建立数据库连接。使用 MySql.Data.MySqlClient 命名空间下的 MySqlConnection 类来实现。例如:

using MySql.Data.MySqlClient;
string connectionString = "server=localhost;database=mydb;uid=root;pwd=password;";
MySqlConnection connection = new MySqlConnection(connectionString);

接下来定义并调用存储过程。假设我们有一个存储过程用于插入用户信息:

DELIMITER //
CREATE PROCEDURE InsertUser(IN p_name VARCHAR(50), IN p_age INT)
BEGIN
    INSERT INTO users (name, age) VALUES (p_name, p_age);
END //
DELIMITER ;

在 C# 中调用该存储过程:

try
{
    connection.Open();
    MySqlCommand command = new MySqlCommand("InsertUser", connection);
    command.CommandType = System.Data.CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@p_name", "张三");
    command.Parameters.AddWithValue("@p_age", 25);
    command.ExecuteNonQuery();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    connection.Close();
}

触发器

触发器是在特定数据库事件(如 INSERT、UPDATE 或 DELETE 操作)发生时自动执行的 SQL 语句。例如,当插入新用户时,我们想记录插入操作的时间。

DELIMITER //
CREATE TRIGGER user_insert_trigger
AFTER INSERT ON users
FOR EACH ROW
BEGIN
    INSERT INTO user_logs (user_id, action, timestamp) VALUES (NEW.id, 'INSERT', NOW());
END //
DELIMITER ;

在 C# 中,不需要额外的代码来触发触发器,只要执行相应的 INSERT 操作,触发器就会自动执行。

自定义函数

自定义函数是返回单一值的可重复使用的代码块。比如创建一个计算两个数之和的函数:

DELIMITER //
CREATE FUNCTION AddNumbers(a INT, b INT)
RETURNS INT
BEGIN
    RETURN a + b;
END //
DELIMITER ;

在 C# 中调用自定义函数与调用存储过程略有不同:

try
{
    connection.Open();
    MySqlCommand command = new MySqlCommand("SELECT AddNumbers(3, 5)", connection);
    object result = command.ExecuteScalar();
    Console.WriteLine("结果: " + result);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    connection.Close();
}

通过掌握 C# 中编写 MySQL 自定义存储过程、触发器与函数的方法,开发者能够更高效地操作数据库,为应用程序的性能和功能带来显著提升。

TAGS: MySQL数据库 存储过程 C#语言 触发器与函数

欢迎使用万千站长工具!

Welcome to www.zzTool.com