在Entity Framework中講解了EF如何支持存儲過程,同樣,Dapper也支持存儲過程,只需要在Query()方法的CommandType中標記使用的是存儲過程就可以了。在Users表上面創建如下的存儲過程:
CREATE proc sp_GetUserByUserName @UserName varchar(16) as begin select * FROM Users WHERE UserName=@UserName end GO
調用存儲過程的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data.SqlClient; 7 using System.Configuration; 8 using System.Data; 9 using Dapper; 10 using DapperApplicationProcedure.Model; 11 12 namespace DapperApplicationProcedure 13 { 14 class Program 15 { 16 static void Main(string[] args) 17 { 18 // 連接字符串 19 string conn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString; 20 using (IDbConnection connection = new SqlConnection(conn)) 21 { 22 var query = connection.Query<User>("sp_GetUserByUserName", new { UserName = "風清揚" }, commandType: CommandType.StoredProcedure); 23 // 輸出 24 query.AsList().ForEach(p => 25 { 26 Console.WriteLine("姓名:"+p.UserName+",郵箱:"+p.Email+",地址:"+p.Address); 27 }); 28 } 29 30 Console.ReadKey(); 31 } 32 } 33 }
運行過程:
注意:例子中只演示了使用一個參數的存儲過程,如果有多個參數使用方法也一樣。
示例代碼下載地址:https://pan.baidu.com/s/1bpjR5cN
二、使用Execute執行帶輸出參數的存儲過程
創建存儲過程如下:
CREATE proc procWithOutPara @num1 int, @num2 int, @sum int output as begin set @sum=@num1+@num2 end GO
dapper調用存儲過程代碼如下:
// 動態類型參數 DynamicParameters paras = new DynamicParameters(); paras.Add("@num1", 23); paras.Add("@num2", 45); paras.Add("@sum", 0, DbType.Int32, ParameterDirection.Output);// 指明是輸出參數,這里為指明參數類型大小 // 執行存儲過程 dbConnection.Execute("procWithOutPara", paras, commandType: CommandType.StoredProcedure); // 獲取輸出參數的值 int sum = paras.Get<int>("@sum");//68