5,存储过程

概要:

       LinQto SQL的使用非常方便。上个留言板的例子中,我们知道只要添加一个LinQ to SQL classes文件,只要将表拖进.dbml文件,vs就会帮你生成一系列的文件。同样,我们也可以将存储过程拖进.dbml文件。Vs也会帮你生成相应的方法,和新的字段。若你不想让存储过程生成新的字段,ReturnType中你可以选择数据库中表的字段类。

内容:

       Vs帮你生成的存储过程代码:

              [global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.proc_SelectAdmin")]

              publicISingleResult<Admin> proc_SelectAdmin()

              {

                     IExecuteResultresult = this.ExecuteMethodCall(this, ((MethodInfo)

(MethodInfo.GetCurrentMethod())));

                     return((ISingleResult<Admin>)(result.ReturnValue));

              }

 

此次学习的表Admin:      

Login          nchar(10)   Checked

PWD          nchar(10)   Checked

         User表:

Login          nchar(10)   Checked

PWD          nchar(10)   Checked

 

存储过程:

         ALTER PROC [dbo].[proc_DeleUserByLogin]

@Login nchar(10)

AS

         delete dbo.[User] where Login=@Login

 

         ALTER PROC [dbo].[proc_InsertUser]

@Login nchar(10),

@PWD nchar(10)

AS

         insert into dbo.[User]values(@Login,@PWD)

 

         ALTER PROC [dbo].[proc_SelectAdmin]

AS

         SELECT * FROM dbo.Admin

 

         ALTER PROC[dbo].[proc_SelectAdminAndUser]

AS

         SELECT * FROM dbo.Admin

         SELECT * FROM dbo.[User]

 

         ALTER PROC [dbo].[proc_SelectCountAdminByLogin]

@Login nchar(10),

@count int output

AS

         set @count=(SELECT count(*) FROMdbo.Admin where Login=@Login)

 

         ALTER PROC[dbo].[proc_SelectStringAdminByLogin]

@Login nchar(10)

AS

         if exists (SELECT 1 FROM dbo.Adminwhere Login=@Login)

         return 123

         else

         return 456

 

         ALTER PROC [dbo].[proc_UpdateAdmin]

@oldLoginnchar(10),

@newLogin nchar(10)

AS

         update dbo.Admin set Login=@newLoginwhere Login=@oldLogin

 

1, 一般查询的存储过程

    LQDemo5DBDataContext ctx = newLQDemo5DBDataContext("连接");

    GridView1.DataSource =ctx.proc_SelectAdmin();

GridView1.DataBind();

或者我们使用Linq to object查询存储过程的结果:

var ad = from c in ctx.proc_SelectAdmin() where c.Login=="admin" select c;

2, 带参数

int? m=-1;//表示可空的int类型,System.Nullable<T>的简写

ctx.proc_SelectCountAdminByLogin("admin",ref m);

Response.Write(m);

3, 带返回值

Response.Write(ctx.proc_SelectStringAdminByLogin("admin"));

4, 多结果集

        //[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.proc_SelectAdminAndUser")]

        //publicISingleResult<proc_SelectAdminAndUserResult> proc_SelectAdminAndUser()

        //{

        //   IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));

        //   return((ISingleResult<proc_SelectAdminAndUserResult>)(result.ReturnValue));

        //}

修改为:

       [Function(Name="dbo.proc_SelectAdminAndUser")]

        [ResultType(typeof(Admin))]

        [ResultType(typeof(User))]

        public IMultipleResultsproc_SelectAdminAndUser()

        {

            IExecuteResult result=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));

            return (IMultipleResults)(result.ReturnValue);

        }

              使用的时候:

                     varrusult = ctx.proc_SelectAdminAndUser();

           var admin = rusult.GetResult<Admin>();

           var user = rusult.GetResult<User>();

              注意:系统有时候会自动修改回原内容。

5, 添加数据

//语句和存储过程两种添加

//User us = new User();

//us.Login="usersss";

//us.PWD = "pwdpwd";

//ctx.Users.InsertOnSubmit(us);//没有主键,代码自带增删改不能用

ctx.proc_InsertUser("useraaa","zxxcz");

 

 

  这里下载源码

posted @ 2010-09-03 09:49  耀哥  阅读(437)  评论(0编辑  收藏  举报