0

关于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*/           }

Additional Info :

参数添加机制(这里)是非常有问题的,因为没有ParameterName to value关联。

他们所做的只是(在第 5 行)

object[] paramArray = new object[] { "%bike%" };

所以我想如果我有超过 1 个参数,它看起来像:

object[] paramArray = new object[] { "%bike%",19,"lala"... };

这意味着我必须知道 sp 的参数输入顺序的顺序!

注意

其他方法确实有这种附加值到 name :

defaultDB.AddInParameter(sprocCmd, "state", DbType.String, "New York");

Question

有什么方法可以使用ExecuteSprocAccessor并且仍然进行 ParameterName to value关联吗?(假设我不知道 sp 输入参数顺序?

4

1 回答 1

1

在内部IParameterMapper使用了一个非常简单的接口:

public interface IParameterMapper
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="command"></param>
    /// <param name="parameterValues"></param>
    void AssignParameters(DbCommand command, object[] parameterValues);
}

这一切都基于职位,因此开箱即用的代码没有太多可以做的事情。

一种选择是编写自己的访问器,该访问器使用知道如何使用参数名称的自定义参数映射器。您可以在线程Entlib6 DAAB - 使用访问器执行带有可选参数的存储过程?.

于 2013-07-13T18:46:57.663 回答