使用C#在MySQL中执行带参数的存储过程?

时间:2012-08-17 19:13:04

标签: c# .net mysql

我正在使用VS 2010 Net Framework 3.5和MySQL 5.1,使用C#

基本上我有一些不同类型的参数(int,string,boolean等),我需要将它们作为输入变量发送到MySQL参数。

我的应用的最后一层是这样做的:

            public Boolean ExecuteProcedure(string ProcedureName, List<SqlParameter> ParameterCollection) {

                Command.CommandType = CommandType.StoredProcedure;
                Command.CommandText = ProcedureName;
                Command.Parameters.AddRange(ParameterCollection.ToArray<SqlParameter>());
                Command.ExecuteNonQuery();
(... etc etc)

所以基本上我需要将以前的所有数据转换为SQL参数列表。

我的问题是:

  • 这是个好主意?也许我发送了另一种物体 ExecuteProcedure功能?
  • 将不同类型的变量转换为SQLParameter的更好方法是什么?
  • 使用这种编程有哪些限制?

更新

我的问题与层之间的沟通有关。例如,前一层可以是......

                List<SqlParameter> INParameters = new List<SqlParameter>();
            INParameters.Add(new SqlParameter("error_code",error_code));
            INParameters.Add(new SqlParameter("error_description",error_description));
            SysDB.ExecuteProcedure("sys_log_insert_error", INParameters);

这是一个很好的方法吗?

谢谢和亲切的问候,

2 个答案:

答案 0 :(得分:1)

请参阅此文章,您只能指定输入和输出,但不能输入 http://www.codeproject.com/Articles/36484/Working-C-code-for-MySql-Stored-Procedures-IN-OUT

答案 1 :(得分:1)

如果您不希望顶层知道有关SQL或SQLParameters的任何信息,您可以传递更通用的内容,例如KeyValuePairhttp://msdn.microsoft.com/en-us/library/5tbh8a42.aspx

我会将ExecuteProcedure更改为此类&gt;&gt;

public Boolean ExecuteProcedure(string ProcedureName, params KeyValuePair<String, Object>[] ParameterCollection) { ... }

您可能还有一些辅助方法可以接收您在KeyValuePair中调用的ExecuteProcedure,以将它们转换为SQLParameter个对象,然后您可以在查询中使用这些对象。< / p>

我认为你明白了......