linq中文教程(二十一)

本文深入探讨SQL中带参数、返回值与多结果集的存储过程,通过实例展示了如何创建并测试这些存储过程,包括参数传递、返回值处理与多结果集的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

带参数的存储过程

  创建如下存储过程:

  


create proc [dbo].[sp_withparameter]
  @customerid nchar(5),
  @rowcount int output
  as
  set nocount on
  set @rowcount = (select count(*) from customers where customerid = @customerid)
 

    使用同样的方法生成存储过程方法,然后使用下面的代码进行测试:

  


int? rowcount = -1;
  ctx.sp_withparameter("", ref rowcount);
  Response.Write(rowcount);
  ctx.sp_withparameter("ALFKI", ref rowcount);
  Response.Write(rowcount);

  结果输出了“01”。说明ID“”的顾客数为0,而ID“ALFKI”的顾客数为1。存储过程的输出参数被封装成了ref参数,对于C#语法来说非常合情合理。SQL代码如下:

  


EXEC @RETURN_VALUE = [dbo].[sp_withparameter] @customerid = @p0, @rowcount = @p1 OUTPUT
  -- @p0: Input StringFixedLength (Size = 5; Prec = 0; Scale = 0) []
  -- @p1: InputOutput Int32 (Size = 0; Prec = 0; Scale = 0) [-1]
  -- @RETURN_VALUE: Output Int32 (Size = 0; Prec = 0; Scale = 0) []

  带返回值的存储过程

  再来创建第三个存储过程:

  


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

  生成方法后,可以通过下面的代码进行测试:

  


Response.Write(ctx.sp_withreturnvalue(""));
  Response.Write(ctx.sp_withreturnvalue("ALFKI"));

  运行后程序输出“100101”

  多结果集的存储过程

  再来创建一个多结果集的存储过程:

 


 create proc [dbo].[sp_multiresultset]
  as
  set nocount on
  select * from customers
  select * from employees

  找到生成的存储过程方法:

 


 [Function(Name="dbo.sp_multiresultset")]
  public ISingleResult sp_multiresultset()
  {
  IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
  return ((ISingleResult)(result.ReturnValue));
  }

  由于现在的VS2008会把多结果集存储过程识别为单结果集存储过程(只认识第一个结果集),我们只能对存储过程方法多小动手术,修改为:

  


[Function(Name="dbo.sp_multiresultset")]
  [ResultType(typeof(Customer))]
  [ResultType(typeof(Employee))]
  public IMultipleResults sp_multiresultset()
  {
  IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
  return (IMultipleResults)(result.ReturnValue);
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值