存储过程除了可以直接调用之外,还可以用于实体的增删改操作。还记得在《一步一步
学Linq to sql(三):增删改》中创建的留言簿程序吗?下面我们就来改造这个程序,使用
存储过程而不是系统生成的SQL 实现实体增删改。首先,我们创建下面的存储过程
create proc sendmessage
@username varchar(50),
@message varchar(500)
as
insert into tbguestbook
(id,username,posttime,[message],isreplied,reply)
values
(newid(),@username,getdate(),@message,0,'')
然后,打开留言簿dbml,把存储过程从服务器资源管理器拖拽到设计视图上。右键点
击tbGuestBook 实体类,选择配置行为。为插入操作选择刚才创建的存储过程方
法,并进行参数匹配。
由于我们的存储过程只接受2 个参数,相应修改以下创建留言的按钮处理事件:
protected void btn_SendMessage_Click(objectsender, EventArgs e)
{
tbGuestBook gb = new tbGuestBook();
gb.UserName = tb_UserName.Text;
gb.Message = tb_Message.Text;
ctx.tbGuestBooks.Add(gb);
ctx.SubmitChanges();
SetBind();
}
运行程序后可以发现,在提交修改的时候调用了下面的SQL:
EXEC @RETURN_VALUE = [dbo].[sendmessage]@username = @p0, @message =
@p1
-- @p0: Input AnsiString (Size = 5; Prec =0; Scale = 0) [zhuye]
-- @p1: Input AnsiString (Size = 11; Prec =0; Scale = 0) [new message]
-- @RETURN_VALUE: Output Int32 (Size = 0;Prec = 0; Scale = 0) []