首先在数据库创建存储过程:
create proc [dbo].[usp_GetPersonById] @Id int as begin select Id,Name from Person where Id=@Id end
XML映射文件中定义参数集合:
<parameterMaps> <!--注意:parameterMap中的参数个数和顺序要和存储过程中的一致--> <parameterMap id="GetPersonByIdProc"> <parameter property="Id" column="Id"/> </parameterMap> </parameterMaps>
然后定义操作:
<!--执行存储过程--> <procedure id="usp_GetPersonById" parameterMap="GetPersonByIdProc" resultClass="PersonViewModel"> usp_GetPersonById </procedure>
DAO层:
public PersonViewModel GetPersonByIdProc(Hashtable ht) { PersonViewModel p = mapper.QueryForObject<PersonViewModel>("usp_GetPersonById", ht); return p; }
Main调用:
static void Main(string[] args) { PersonDAO dao = new PersonDAO(); Hashtable ht = new Hashtable(); ht.Add("Id", 2); PersonViewModel p = dao.GetPersonByIdProc(ht); if (p != null) Console.WriteLine(p.Id + p.Name); Console.ReadKey(); }
注意:Hashtable中的键值名称和参数集合中的property相对应,并且区分大小写。
执行带output输出参数的存储过程
修改下存储过程:
ALTER proc [dbo].[usp_GetPersonById] @Id int, @totalCount int output as begin select Id,Name from Person where Id=@Id set @totalCount=(select count(*) from Person) end
XML映射文件中定义参数集合:
<parameterMaps> <!--注意:parameterMap中的参数个数和顺序要和存储过程中的一致--> <parameterMap id="GetPersonByIdProc"> <parameter property="Id" column="Id"/> <parameter property="totalCount" column="totalCount" direction="Output"/> </parameterMap> </parameterMaps>
定义操作和DAO层不变:
<!--执行存储过程--> <procedure id="usp_GetPersonById" parameterMap="GetPersonByIdProc" resultClass="PersonViewModel"> usp_GetPersonById </procedure>
Main调用:
static void Main(string[] args) { int totalCount = 0; PersonDAO dao = new PersonDAO(); Hashtable ht = new Hashtable(); ht.Add("Id", 2); ht.Add("totalCount", totalCount); PersonViewModel p = dao.GetPersonByIdProc(ht); if (p != null) Console.WriteLine(p.Id + p.Name+" 共"+ ht["totalCount"] + "条数据"); Console.ReadKey(); }
参考:http://www.cnblogs.com/caoyc/category/873268.html