FromProc 方法啟動預存程序查詢
無參數預存程序
DbSession.Default.FromProc("Ten Most Expensive Products").ToDataTable();
輸入參數:AddInParameter
DbSession.Default.FromProc("Sales by Year")
.AddInParameter("Beginning_Date", DbType.DateTime, "1995-01-01")
.AddInParameter("Ending_Date", DbType.DateTime, "1996-12-01")
.ToDataTable();
對應預存程序:
CREATE PROCEDURE "Sales by Year"
@Beginning_Date DateTime, @Ending_Date DateTime AS
SELECT Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal, DATENAME(yy,ShippedDate) AS Year
FROM Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID
WHERE Orders.ShippedDate BETWEEN @Beginning_Date AND @Ending_Date
輸出/輸入輸出/返回值參數
| 方法 | 對應 | 用途 |
| AddInParameter | INPUT | 傳入值 |
| AddOutParameter | OUTPUT | 接收輸出值 |
| AddInputOutputParameter | INPUT OUTPUT | 雙向 |
| AddReturnValueParameter | RETURN VALUE | 接收 RETURN 碼 |
執行並取得輸出參數
var cmd = DbSession.Default.FromProc("MyProc")
.AddInParameter("@InParam", DbType.Int32, 10)
.AddOutParameter("@OutParam", DbType.Int32)
.AddReturnValueParameter("@RetVal", DbType.Int32);
// 執行非查詢
cmd.ExecuteNonQuery();
// 讀取輸出
int outVal = (int)cmd.GetParameterValue("@OutParam");
int retVal = (int)cmd.GetParameterValue("@RetVal");
交易支援
DbTrans trans = DbSession.Default.BeginTransaction();
DbSession.Default.FromProc("MyProc").SetDbTransaction(trans).ExecuteNonQuery();
trans.Commit();
最佳實務
- 參數名稱**必須包含 @ 前綴**(如
@Beginning_Date),與資料庫定義一致。
DbType 需與資料庫參數型別對應,避免隱性轉換錯誤。
- 僅查詢結果集用
ToDataTable/ToList;需輸出參數時用 ExecuteNonQuery + GetParameterValue。
- 複雜業務邏輯優先放預存程序,ORM 僅負責呼叫與參數綁定。
FromProc 讓 Hxj.Data 完整支援預存程序,參數處理型別安全、交易整合無縫,是 Legacy 資料庫遷移與高效能批次作業的關鍵橋樑。
- 上一篇文章: Hxj.Data DbSession 輔助統計方法:Sum/Avg/Count/Max/Min 一鍵完成聚合查詢
- 下一篇文章: Hxj.Data 直接 SQL 執行:FromSql、參數化、DbParameter 陣列與鏈式 AddInParameter
Copyright ©
程式碼之家 All Rights Reserved