普通存储过程

create proc sp_singleresultset
as
set nocount on
select * from customers

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

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

打开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();


结果如下

一步一步学Linq to sql(五):存储过程_查询分析器_02

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

首先还是在查询分析器中执行如下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");


结果如下

一步一步学Linq to sql(五):存储过程_查询分析器_03

使用存储过程新增数据 

在查询分析器中执行如下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(五):存储过程_查询分析器_04

这是添加之前, 可以参看 Linq To SQL(三):增删查改​

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();


 一步一步学Linq to sql(五):存储过程_查询分析器_05 

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

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