创建如下存储过程:
create proc delmessage
@id uniqueidentifier
as
delete tbguestbook where id=@id
按照前面的步骤生成存储过程方法,并为删除操作执行这个存储过程方法。在选择参数
的时候我们可以看到,ID 分当前值和原始值,我们选择当前值即可
无须改动任何逻辑代码,进行删除留言操作后可以跟踪到下面的SQL:
EXEC @RETURN_VALUE = [dbo].[delmessage] @id= @p0
-- @p0: Input Guid (Size = 0; Prec = 0;Scale = 0)
[9e3c5ee3-2575-458e-899d-4b0bf73e0849]
-- @RETURN_VALUE: Output Int32 (Size = 0;Prec = 0; Scale = 0) []
使用存储过程更改数据
创建如下存储过程:
create proc replymessage
@id uniqueidentifier,
@reply varchar(500)
as
update tbguestbook set reply=@reply,isreplied=1 where id=@id
由于更新的时候并不会更新主键,所以我们可以为两个参数都指定当前值。回复留言后
可以跟踪到下面的SQL:
EXEC @RETURN_VALUE = [dbo].[replymessage]@id = @p0, @reply = @p1
-- @p0: Input Guid (Size = 0; Prec = 0;Scale = 0)
[67a69d0f-a88b-4b22-8939-fed021eb1cb5]
-- @p1: Input AnsiString (Size = 6; Prec =0; Scale = 0) [464456]
-- @RETURN_VALUE: Output Int32 (Size = 0;Prec = 0; Scale = 0) []
假设有这样一种应用,我们需要修改留言簿中不合法的用户名:
create proc modiusername
@oldusername varchar(50),
@newusername varchar(50)
as
update tbguestbook set username=@newusernamewhere username = @oldusername
有个网友起名叫“admin”,我们要把所有这个名字修改为“notadmin”。
然后运行下面的测试代码:
var messages = from gb inctx.tbGuestBooks
select gb;
foreach (var gb inmessages)
{
if(gb.UserName == "admin")
gb.UserName = "notadmin";
}
运行程序后能跟踪到下面的SQL:
SELECT [t0].[ID], [t0].[UserName],[t0].[PostTime], [t0].[Message], [t0].[IsReplied],
[t0].[Reply]
FROM [dbo].[tbGuestBook] AS [t0]
EXEC @RETURN_VALUE = [dbo].[modiusername]@oldusername = @p0,
@newusername = @p1
-- @p0: Input AnsiString (Size = 5; Prec =0; Scale = 0) [admin]
-- @p1: Input AnsiString (Size = 8; Prec =0; Scale = 0) [notadmin]
-- @RETURN_VALUE: Output Int32 (Size = 0;Prec = 0; Scale = 0) []
到这里,你应该能明白当前值和原始值的含义了吧。