前言
這是最近工作上的一個問題:如何傳遞 Collection / Array / List 資料給 Stored Procedure。雖然過去曾經請教同事如何實作,了解透過 DataTable 的方式可以達到需求,但先前似乎沒有實作經驗。趁這次工作之餘,以這邊文章做個紀錄,提供未來的自己與有興趣的朋友參考。本篇文章若有錯誤或任何建議,請各位先進不吝指教。
Console Application (.NET Framework 4.6.1)
Entity Framework 6.2.0
Visual Studio 2017
介紹
前置作業
1. 我們的實作是透過 Entity Framework 實作,所以務必確認專案有安裝 Entity Framework
1. 我們的實作是透過 Entity Framework 實作,所以務必確認專案有安裝 Entity Framework
2. 確認有 MS SQL / Azure SQL 資料庫,且能透過帳號密碼驗帳方式登入
3. 確認您的連線字串與 BaseContext 類別建立完整,可以連線到資訊庫
說明
在傳遞集合資料到預存程序之前,我們必須先建立使用者定義資料表類型。透過這個類型作為參數,即可傳遞集合至預存程序:
類型建立語法範例如下, PlayDataType 裡面只包含了一個 Id 資料欄位:
接下來,我們在範例預存程序內的傳入參數加上 PlayDataType 這個類型:
回到專案,我們撰寫撰寫相關語法呼叫預存程序:
如上面程式碼所示,我們做了下列動作:
- 透過 SqlParameter 建立傳入參數,並建立一個 DataTable 存放資料,放入這個 SqlParameter,類型為 SqlDbType.Structured
- SQL 語法為 var sql = "dbo.usp_PlayerData_GetPlayerData @playerDataType";
- 傳回參數資料為 PlayerData 這個類別
- 執行 await db.Database.SqlQuery
(sql, parameters).ToArrayAsync(); 取得結果
0 留言