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

简介: 普通存储过程 create proc sp_singleresultset as set nocount on select * from customers 首先在查询分析器运行下面的代码来创建一个存储过程sp_singleresultset。

普通存储过程

create proc sp_singleresultset
as
set nocount on
select * from customers  

首先在查询分析器运行下面的代码来创建一个存储过程sp_singleresultset。然后打开IDE的服务器资源管理器,我们从存储过程中找到刚才创建的存储过程,然后拖动到设计视图。在方法面板中可以看到已经创建了一个sp_singleresultset的方法,如下图:

打开GuestBook.designer.cs,可以找到如下代码

		[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.sp_singleresultset")]
		public ISingleResult<sp_singleresultsetResult> sp_singleresultset()
		{
			IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
			return ((ISingleResult<sp_singleresultsetResult>)(result.ReturnValue));
		}

  然后调用

            GuestBookDataContext Book=new GuestBookDataContext();
            var GetResult = (from c in Book.sp_singleresultset()
                            where c.CustomerID.StartsWith("A")
                            select c).ToList();

结果如下

带参数和返回值的存储过程

首先还是在查询分析器中执行如下SQL

create proc [dbo].[sp_withreturnvalue]
@customerid nchar(5)
as
set nocount on
if exists (select 1 from customers where customerid = @customerid)
return 101
else
return 100

还是在IDE服务资源管理器中将存储过程拖进dbml文件中,然后在代码中进行调用

            string str = Book.sp_withreturnvalue("").ToString();
            str = str + Book.sp_withreturnvalue("ALFKI");

结果如下

使用存储过程新增数据 

在查询分析器中执行如下SQL

create proc sendmessage
@username varchar(50),
@message varchar(500)
as
insert into tbGuestBook
(id,username,posttime,[message],IsRequired,reply)
values
(newid(),@username,getdate(),@message,0,'')

然后,打开留言簿dbml,把存储过程从服务器资源管理器拖拽到设计视图上。右键点击tbGuestBook实体类,选择配置行为。如下图,为插入操作选择刚才创建的存储过程方法,并进行参数匹配:

这是添加之前, 可以参看 Linq To SQL(三):增删查改 http://www.cnblogs.com/aehyok/archive/2013/04/12/3017545.html

        public ActionResult SaveBook(tbGuestBook tb)
        {
            tbGuestBook gb = null;
            if (tb.ID.ToString() != "00000000-0000-0000-0000-000000000000")
            {
                gb = ctx.tbGuestBook.Single(b => b.ID == new Guid(tb.ID.ToString()));
                gb.PostTime = DateTime.Now;
                gb.UserName = tb.UserName;
                gb.Message = tb.Message;
                ctx.SubmitChanges();
                return Index();
            }
            else
            {
                tb.ID = Guid.NewGuid();
                tb.IsRequired = false;
                tb.PostTime = DateTime.Now;
                ctx.tbGuestBook.InsertOnSubmit(tb);
                ctx.SubmitChanges();
            }
                return Index();
        }

  看else下面tb实体类,还需要给ID,PostTime,IsRequired赋值,这样才能添加操作。

现在可以修改代码,将else代码改为

                ctx.tbGuestBook.InsertOnSubmit(tb);
                ctx.SubmitChanges();

  

tb实体只需要两个参数即可添加到数据库中。

 

目录
相关文章
|
2月前
|
存储 SQL 数据库
sql serve存储过程
sql serve存储过程
|
2月前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
33 1
|
1月前
|
存储 SQL 数据库
SQL 语言:存储过程和触发器
SQL 语言:存储过程和触发器
45 6
|
1月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
131 0
|
2月前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
|
2月前
|
存储 SQL 安全
使用SQL存储过程有什么好处 用视图有什么好处
使用SQL存储过程有什么好处 用视图有什么好处
18 0
|
2月前
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
|
1月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
1月前
|
存储 SQL 关系型数据库
MySQL存储过程和存储函数的使用
MySQL的存储过程和存储函数在功能和用法上有明显的区别。存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,通过指定名称和参数(如果有)来调用执行,可以返回多个值或结果集,但不直接返回值。而存储函数则是一个有返回值的特殊存储过程,它返回一个值或表对象,可以直接嵌入SQL语句中使用,如SELECT语句中。两者都是为了提高SQL代码的重用性和性能,但使用场景和方式有所不同。
176 4