【发布时间】:2014-03-29 18:19:17
【问题描述】:
我目前正在学习 Enterprise Library 6 的 DataAccess 块。
我正在尝试了解如何使用 ExecuteSprocAccessor 返回一系列对象
这是我正在使用的代码:
using (DbCommand cmd = sqlServerDB.GetStoredProcCommand("SalesByCategory"))
{
//Pass parameters
cmd.Parameters.Clear();
sqlServerDB.AddInParameter(cmd,"CategoryName",DbType.String,"Beverages");
sqlServerDB.AddInParameter(cmd, "OrdYear", DbType.String, "1996");
IRowMapper <OrderName> resmapper = MapBuilder<OrderName>.MapAllProperties()
.Map(x => x.Name).ToColumn("ProductName")
.Map(x => x.PurchaseTotal).ToColumn("TotalPurchase")
.Build();
List<OrderName> procaccessor = sqlServerDB.ExecuteSprocAccessor<OrderName>("SalesByCategory", resmapper, cmd.Parameters).ToList<OrderName>();
}
当它运行时,我得到一个“参数的数量与存储过程的值的数量不匹配”。错误。当我检查 cmd.Parameters 集合时,我确实看到了上述 2 个参数。
我很确定错误出现在最后一条指令中的 cmd.Parameters 上。根据文档,我可以使用对象数组。如何使用 DBParameter 集合?
== 2014 年 3 月 29 日更新 ==
在寻找了一段时间的答案后,我决定尝试创建一个将 DBParameter 转换为对象数组的方法。我创造了这个......
public static object[] ParametertoObj(DbCommand cmd)
{
object[] obj = new object[cmd.Parameters.Count];
int i = 0;
foreach (DbParameter item in cmd.Parameters)
{
obj[i] = item.Value;
i++;
}
return obj;
}
此方法的重要之处在于,参数必须按照在存储过程中被调用的顺序添加到集合中。
我很确定一定有一种有效的方法来做到这一点。
【问题讨论】: