您的位置:知识库 » 数据库

一步一步学Linq to sql(五):存储过程

作者: lovecherry  来源: 博客园  发布时间: 2008-09-26 23:04  阅读: 20665 次  推荐: 0   原文链接   [收藏]  

系列文章导航:

一步一步学Linq to sql(一):预备知识

一步一步学Linq to sql(二):DataContext与实体

一步一步学Linq to sql(三):增删改

一步一步学Linq to sql(四):查询句法

一步一步学Linq to sql(五):存储过程

一步一步学Linq to sql(六):探究特性

一步一步学Linq to sql(七):并发与事务

一步一步学Linq to sql(八):继承与关系

一步一步学Linq to sql(九):其它补充

一步一步学Linq to sql(十):分层构架的例子


使用存储过程更改数据

       创建如下存储过程:

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) []

       到这里,你应该能明白当前值和原始值的含义了吧。

      

0
0

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻