技术文摘
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 自定义存储过程、触发器与函数的方法,开发者能够更高效地操作数据库,为应用程序的性能和功能带来显著提升。
- HashMap 中的一个“坑”之谈
- 工作数年,我对数据校验仅知皮毛
- Python 基础与蒙特卡洛算法实现排列组合题目分享(附源码)
- InnoDB 之 Redolog 的庖丁解牛
- 基于 LYEVK-3861 的 HarmonyOS 火焰报警系统开发
- Selenium WebDriver 自动化测试的十项卓越实践
- React Hooks 性能优化的正确打开方式
- 几步将 Spring Boot 项目部署至 K8S 之步骤
- Go Generate 完整指南,你掌握了吗?
- 老师再度询问我 MyBatis 事宜
- Python 被误认作“弱”类型语言遭鄙视
- TensorFlow 2.7 正式版登场 支持 Jax 模型向 TensorFlow Lite 转换
- 在 Ubuntu Linux 中正确设置 JAVA_HOME 变量的方法
- 京东云 11.11“云上热爱节”:1 元秒杀、1 折续费、亿元补贴来袭
- 鸿蒙轻内核 A 核源码分析之三:物理内存(一)