一步一步学Linq to sql(五):存储过程
[2] 一步一步学Linq to sql(五):存储过程
[3] 一步一步学Linq to sql(五):存储过程
[4] 一步一步学Linq to sql(五):存储过程
[5] 一步一步学Linq to sql(五):存储过程
[6] 一步一步学Linq to sql(五):存储过程
[7] 一步一步学Linq to sql(五):存储过程
系列文章导航:
一步一步学Linq to sql(二):DataContext与实体
使用存储过程更改数据
创建如下存储过程:
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=@newusername where username = @oldusername |
有个网友起名叫“admin”,我们要把所有这个名字修改为“notadmin”。那么,可以如下图设置update操作:
然后运行下面的测试代码:
var messages = from gb in ctx.tbGuestBooks select gb; foreach (var gb in messages) { 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) [] |
到这里,你应该能明白当前值和原始值的含义了吧。