关于 Microsoft Enterprise Libarary 6 的新版本,他们有一个名为ExecuteSprocAccessor
的方法(在执行SP 时应返回Ienumerable<T>
)它的所有重载都是:
用法示例:
/*1*/ [Description("Return data as a sequence of objects using a stored procedure")]
/*2*/ static void ReadDataAsObjects()
/*3*/ {
/*4*/ // Create an object array and populate it with the required parameter values
/*5*/ object[] paramArray = new object[] { "%bike%" };
/*6*/ // Create and execute a sproc accessor that uses default parameter and outpu`t mappings
/*7*/ IEnumerable<Product> productData = defaultDB.ExecuteSprocAccessor<Product>("GetProductList", paramArray);
/*8*/ //...
/*9*/ //...
/*10*/ }
其他信息:
参数添加机制(此处)非常有问题,因为没有ParameterName to value
关联。
他们所做的就是(第5行)
object[] paramArray = new object[] { "%bike%" };
所以我想如果我有超过1个参数,它将会是:
object[] paramArray = new object[] { "%bike%",19,"lala"... };
这意味着我必须知道sp的param输入顺序的顺序!!!
NB
其他方法确实将这种值附加到名称:
defaultDB.AddInParameter(sprocCmd, "state", DbType.String, "New York");
问题
有没有办法使用ExecuteSprocAccessor
并仍然进行ParameterName to value
关联? (假设我不知道sp输入参数顺序?
答案 0 :(得分:1)
在内部使用IParameterMapper
这是一个非常简单的界面:
public interface IParameterMapper
{
/// <summary>
///
/// </summary>
/// <param name="command"></param>
/// <param name="parameterValues"></param>
void AssignParameters(DbCommand command, object[] parameterValues);
}
这一切都基于位置,所以开箱即用的代码没有多少可以做到的。
一种选择是编写自己的Accessor,它使用知道如何使用参数名称的自定义参数映射器。您可以在帖子Entlib6 DAAB - Using accessors to execute stored procedures with optional parameters?中找到相关示例。