一步一步学Linq to sql(五):存储过程
普通存储过程
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实体只需要两个参数即可添加到数据库中。
分类:
Linq
标签:
Linq To Sql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构