我正在做一个文章管理系统的后台,程序结构大致是这样的:页面上一个FormView绑定ObjectDataSource控件,ODS控件的SelectMethod,InsertMethod,UpdateMethod绑定BLL层的Article类的方法,BLL层的方法再调用DAL层的方法,执行具体的SQL语句以及返回值。现在想在FormView插入一条记录之后,获得刚刚插入记录的ID值,在以前不分层的时候,直接用ADO.NET,构造一个output参数就能获得SELECT @ID==@@Identity的值,现在分三层了,DAL和BLL之间倒是很好传递参数,但是BLL想返回参数到页面该怎么做?我看到ObjectDataSource的参数有Direction="Output"和"ReturnValue"的属性,但那似乎只针对直接写存储过程的,不好用在BLL层上。
要是不用ObjectDataSouce的话,又回到WebForm+ADO.NET的老路上去了,需要手工键入很多代码,而且少了很多ASP.NET2.0以后的高级数据绑定控件带来的便利性,很可能得不偿失啊。
比如我的BLL层中,Article.Insert()方法,返回值是刚插入的文章ID,那么我前台页面的ObjectDataSource或者是FormView在执行完插入操作后怎么才能取到呢?我想微软应该会考虑到吧。求高手指点!
谢谢指教,分就结给你了!经过我测试,<InsertParameters>里面用
<asp:Parameter Name="文章ID" Type="Int32" Direction="ReturnValue" />的方式会出错,
因为BLL层里面的方法这样写不认:
public static int Insert(string 标题,string 内容) {...}
会出错提示 InsertMethod调用的参数必须是 标题,内容,文章ID
因此也就没机会写e.ReturnValue了所以只能用<asp:Parameter Name="文章ID" Direction="Output" />
BLL的方法改成
public static void Insert (string 标题,string 内容,out int 文章ID)
即可通过e.OutputParameters["文章ID"]返回新插入的ID了