1
目前我正在學習的數據訪問塊企業庫6.企業庫6 ExecuteSprocAccessor與數據庫參數
我想了解如何返回使用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;
}
用這種方法最重要的是,這些參數都被添加到集合中的相同的順序,他們被稱爲存儲過程。
我非常肯定,必須有一個有效的方法來做到這一點。當你注意參數必須匹配相同的順序存儲過程
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, "Beverages", 1996).ToList<OrderName>();
:只是直接與要使用的值調用訪問 -
如果sp有輸出參數,如何獲取它的值 –
@ShashankSood,我的頭頂,我不認爲你可以用訪問器做到這一點,因爲他們只能訪問IDataReader和獲取輸出參數需要訪問實際的輸出參數。如果你只是想使用ADO.NET獲取輸出參數,那麼這應該有所幫助:https://stackoverflow.com/questions/290652/get-output-parameter-value-in-ado-net。 –
不,我只想用這種方法 –