Linq to SQL之使用存储过程(2)

本文接着上篇文章Linq to SQL之使用存储过程 (1),继续探讨如何在Linq to SQL中使用存储过程。

在写存储过程的时候,有时候会用到返回值而不是output参数,现在看看怎样取到该返回值呢?

比如这样一个存储过程:

create procedure dbo.linqDemo4
   @input varchar(20)
as
   select * from customers
   return 20

设计器自动生成的函数如下,可以看到并没有提供方式取到该存储过程的返回值:

 [Function(Name="dbo.linqDemo4")]
  public ISingleResult<Customer> linqDemo4([Parameter(DbType="VarChar(20)")]  string input) {
   IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo) (MethodInfo.GetCurrentMethod())), input);
   return ((ISingleResult<Customer>)(result.ReturnValue));
  }

只能靠自己了,增加一个函数对它进行包装,以此来取到返回值

 public ISingleResult<Customer> linqDemo4WithReturnValue(string input,  out int returnValue)
  {
    ISingleResult<Customer> result = linqDemo4(input);
    returnValue = (int)result.ReturnValue;
    return (ISingleResult<Customer>)(result);
  }

增加一个out参数returnValue,这样就能从结果中取到这个返回值。不知道以后的设计器能不能自动 识别。

有时候会到这种需求,存储过程返回多个结果集合,那么这时候怎么操作才能把结果集分开呢。比如 下面这个存储过程,能不能把Customer和Order的结果集分别取到呢?

create procedure dbo.linqDemo5
as
   select * from customers
   select * from orders

时间: 2024-09-20 01:10:10

Linq to SQL之使用存储过程(2)的相关文章

LINQ体验(14)——LINQ to SQL语句之存储过程

存储过程 在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中 怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的 几个存储过程来理解一下. 1.标量返回 在数据库中,有名为 Customers Count By Region的存储过程.该存储过程返回顾客所在 "WA"区域的数量. ALTER PROCEDURE [dbo]. [NonRowset] (@param1 NVARCHAR(15)) AS BEGIN SET NOCOUNT O

Linq to SQL之使用存储过程(1)

本文以Northwind数据库为例,说说Linq to SQL中是怎样使用存储过程. 首先我们创建一个存储过程: create procedure dbo.linqDemo1 as select * from customers 打开dbml设计器,在Server Explorer里面找个这个存储过程,把它拖拽到设计器里面,可以看到这个 存储过程被映射为方法了

测试运行: 使用LINQ测试SQL存储过程

对访问和操作后端 SQL Server 数据库的程序进行测试十分常见.在此类情况中,应用程序基本都是通过使用 SQL 存储过程来与后端数据进行交互的.此时,可将存储过程看作待测试系统的辅助方法:因此也必须像系统中的任何其他模块一样测试它们. 尽管在测试 SQL 存储过程时可使用的方法有很多,但我发现使用 LINQ 可极大地简化测试自动化.在本月的专栏中,我将向您展示如何使用 LINQ(尤其是使用 LINQ to SQL 提供程序)来测试 SQL 存储过程.我将假定您的 C# 和 SQL 技能属于

LINQ to SQL语句(20)之存储过程

存储过程 在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中 怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的 几个存储过程来理解一下. 1.标量返回 在数据库中,有名为 Customers Count By Region的存储过程.该存储过程返回顾客所在 "WA"区域的数量. ALTER PROCEDURE [dbo]. [NonRowset] (@param1 NVARCHAR(15)) AS BEGIN SET NOCOUNT O

LINQ to SQL的执行可能无法复用查询计划

查询计划 Sql Server在执行一条查询语句之前都对对它进行"编译 "并生成"查询计划",查询计划告诉Sql Server的查询引擎 应该用什么方式进行工作.Sql Server会根据当前它可以收集到的各种信息(例 如内存大小,索引的统计等等)把一条查询语句编译成它认为"最优 "的查询计划.很显然,得到这样一个查询计划需要消耗CPU资源,而大部 分的查询语句每次经过编译所得到的查询计划往往是相同的,因此除非指定了 RECOMPILE选项,Sq

在Linq to Sql中管理并发更新时的冲突(1) 预备知识

无论与目前的ORM框架相比有没有优势,Linq to Sql在语言和平台的级别上 为我们提供了一种新的操作对象和数据的方式,在一定程度上为我们解决了 Object != Data的问题.在实际应用中,对于数据库的操作往往有着天生的并发 性,因此在更新数据时可能会产生冲突.有些时候,如果没有合理的解决冲突问 题,轻则让用户摸不着头脑,重则让系统数据处于一种不一致的状态.Linq to Sql自然考虑到了这一点,本系列讨论的内容,就是在使用Linq to Sql时,如何 管理并发更新时产生的冲突.

扩展LINQ to SQL

ORM框架在删除数据方面一直有个尴尬,那就是无法通过指定条件批量删除数 据(当然这本不是ORM的问题,只是使用上感觉不方便).于是对于一些删除操 作,我们不得不写SQL语句或者执行存储过程,例如: ItemDataContext db = new ItemDataContext(); db.ExecuteCommand( "DELETE FROM Item WHERE [CreateTime] < {0}", DateTime.UtcNow.AddMonths(-1)); 我始终

LINQ to SQL快速上手 step by step

前言 最近接连遇到几个朋友问我同一个问题,就是关于.NET平台上ORM框架的选择.我想在这个讲求效率的时代,谁也不想手写SQL或存储过程去访问数据库了.大家都知道,在Java平台上,ORM这一块基本是Hibernate的天下.当然,相对轻量级的iBatis也有不错的表现. 不过谈到.NET平台,ORM框架似乎相对混乱了点.很多朋友问我的时候,往往会这样问:NHibernate.NBear和Castle该选择哪个?而当我反问:为什么不适用微软自带的Linq to Sql呢?对方经常会迷茫和不解.

Linq To Sql进阶系列(五)Store Procedure篇

Store Procedure,存储过程.也是被别人写过的东西.我习惯性先看别人都写了点啥,然后才开始 想看看自己还要写点啥.那就先谈谈它与udf的区别吧. 在Linq To Sql进阶系列(四)User Define Function篇 中,我们提到了两者的差别.比如Store Procedure支持多个rowset的,而udf不行.他们还有一些其他的差别.Store Procedure只能返回整型, 而udf可以是其他类型,比如char等,除个别类型外,比如imager类型,是不可以做为ud