我正在使用VS 2010 Net Framework 3.5和MySQL 5.1,以及C#
基本上,我有一些具有不同类型(int,string,boolean等)的参数,我需要将它们作为输入vars发送到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函数?
将我的其他类型的var转换为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);
这是这样做的好方法吗?
谢谢和亲切的问候,
最佳答案
如果您不希望顶层了解有关SQL或SQLParameters的任何信息,则可以传递更通用的内容,例如KeyValuePair
(http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx)
我将ExecuteProcedure
更改为此类>>public Boolean ExecuteProcedure(string ProcedureName, params KeyValuePair<String, Object>[] ParameterCollection) { ... }
您可能还具有一些辅助方法,该方法接受在KeyValuePair
中调用的ExecuteProcedure
,将它们转换为SQLParameter
对象,然后可以在查询中使用。
我认为你说对了..