StoredProcedure「建议收藏」

StoredProcedure「建议收藏」 这个玩意称为存储过程,类似于其他编程语言中的函数,它含有可与IF,WHILE等这样的编程构造所结合的SQL语句,以编译的形式保存在数据库中。存储过程可用来编写数据库中处理事务的代码。它可以做SQL所可以做的所有事情!!!它的特点是:1,可以接受输入参数,以输出参数的形式给调用过程返回多个值。2,可以给调用过程或批处理返回状态值,表示成功或失败。3,可以调用其它存储过程并执

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
 

这个玩意称为存储过程,类似于其他编程语言中的函数,它含有可与IFWHILE等这样的编程构造所结合的SQL语句,以编译的形式保存在数据库中。存储过程可用来编写数据库中处理事务的代码。

它可以做SQL所可以做的所有事情!!!

它的特点是:

1,可以接受输入参数,以输出参数的形式给调用过程返回多个值。

2,可以给调用过程或批处理返回状态值,表示成功或失败。

3,可以调用其它存储过程并执行它们。

4,允许模块化编程,就是说可以独立于应用程序创建它们,可以在不重新编译应用程序的情况下修改它们。

5,允许以更快的速度执行。在客户服务器系统中,使用存储过程可以大大的提高性能。

6,减少网络通信量。

7,可以使用安全机制。

 

在程序中,StoredProcedure是单独存储的。但是它是和数据库是联系在一起的。

我们可以使用visual studioServer Explorer,来查看StoredProcedure

 

当将 CommandType 属性设置为 StoredProcedure 时,应将 CommandText 属性设置为存储过程的名称。当调用“执行”(Execute) 方法之一时,该命令将执行此存储过程。

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandText=”sp_Select_AllEmployees”;

还记得这两句代码吗?这是在components的源文件中常见的。

 

 

虽然可以通过以 SQL 语句的形式传递参数自变量之前的存储过程名称来调用存储过程,但如果使用 ADO.NET Command 对象的 Parameters 集合,则可以显式地定义存储过程参数并访问输出参数和返回值。

Parameter 对象可以使用 Parameter 构造函数来创建,或通过调用 Command Parameters 集合的 Add 方法来创建。Parameters.Add 会将构造函数参数或现有 Parameter 对象用作输入。

对于 Input 参数之外的参数,必须设置 ParameterDirection 属性来指定参数类型是 InputOutputOutput 还是 ReturnValue默认情况下,是输入参数。

 

看一段实际代码

SqlCommand sampleCMD = new SqlCommand(“SampleProc”, nwindConn);

sampleCMD.CommandType = CommandType.StoredProcedure;

 

SqlParameter sampParm = sampleCMD.Parameters.Add(“RETURN_VALUE”, SqlDbType.Int);

sampParm.Direction = ParameterDirection.ReturnValue;

 

sampParm = sampleCMD.Parameters.Add(“@InputParm”, SqlDbType.NVarChar, 12);

sampParm.Value = “Sample Value”;

 

sampParm = sampleCMD.Parameters.Add(“@OutputParm”, SqlDbType.NVarChar, 28);

sampParm.Direction = ParameterDirection.Output;

 

nwindConn.Open();

 

SqlDataReader sampReader = sampleCMD.ExecuteReader();

 

Console.WriteLine(“{0}, {1}”, sampReader.GetName(0), sampReader.GetName(1));

 

while (sampReader.Read())

{

Console.WriteLine(“{0}, {1}”, sampReader.GetInt32(0), sampReader.GetString(1));

}

 

sampReader.Close();

nwindConn.Close();

 

Console.WriteLine(” @OutputParm: {0}”, sampleCMD.Parameters[“@OutputParm”].Value);

Console.WriteLine(“RETURN_VALUE: {0}”, sampleCMD.Parameters[“RETURN_VALUE”].Value);

 

ReturnValue:用来捕捉StoredProcedureReturn值。

使用Output参数返回值的存储过程非常有用,他们可用于从数据库中检索几份信息,但信息互不相关,或者在结果集中获取信息。

 

了解一下使用了StoredProcedure的应用程序,它们一般分成两个部分:

1StoredProcedure

ALTER PROCEDURE sp_Dates_ByEmployeeId

 

(

@EmployeeID int,

@EDate datetime OUTPUT,

@LDate datetime OUTPUT

 

)

 

AS

/* SET NOCOUNT ON */

SELECT @EDate=Min(OrderDate)

FROM Orders

WHERE EmployeeId=@EmployeeID

 

SELECT @LDate=Max(OrderDate)

FROM Orders

WHERE EmployeeId=@EmployeeID

RETURN

 

2,应用程序的对应部分:

      cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandText=”sp_Dates_ByEmployeeId”;

 

SqlParameter parInput = cmd.Parameters.Add(“@EmployeeId”,SqlDbType.Int);

parInput.Direction = ParameterDirection.Input;

parInput.Value = Convert.ToInt32(txtEmpId2.Text);

 

 

SqlParameter parOutput2 = cmd.Parameters.Add(“@LDate”,SqlDbType.DateTime);

parOutput2.Direction = ParameterDirection.Output;

 

 

SqlParameter parOutput1 = cmd.Parameters.Add(“@EDate”,SqlDbType.DateTime);

parOutput1.Direction = ParameterDirection.Output;

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164499.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • uva1599_cumulative iteration number

    uva1599_cumulative iteration numberProblemC:Self­describingSequence SolomonGolomb’s self­describingsequence  istheonlynon­decreasingsequenceofpositiveintegerswiththepropertythatitcontainsexactly f(k)

    2022年9月27日
    4
  • 入Silverlight QQ群者必读「建议收藏」

    入Silverlight QQ群者必读「建议收藏」建立本技术群的目的,是为拥有共同爱好的你们提供一个交流平台,我们在此相约同游,共同分享彼此的Silverlight与WPF开发技术心得经验,当然也可以讲饮讲食,一起FB……希望各群友可以相互尊重,文明上网,将本群建成一个和谐的大家庭。         正所谓国有国法、群有群规!希望大家配合遵守!           1.严禁攻击人身的言论;在群中公然侮辱他人、捏造事实诽谤他人、对他人进

    2022年7月17日
    14
  • 翻译器DIY————次序

    翻译器DIY————次序

    2022年1月12日
    47
  • ctrl+c复制,ctrl+v粘贴_C C T V 8

    ctrl+c复制,ctrl+v粘贴_C C T V 8从Windows世界走入Mac世界,最让不习惯的是在Mac中“复制/粘贴”的快捷键是Command+C/V,而且Command键与C/V键靠得太近,只能用大拇指与食指进行操作,也让人不习惯。再加上远程

    2022年8月5日
    10
  • JAVA垃圾回收-可达性分析算法「建议收藏」

    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。这种方式的特点是实现简单,而且效率较高,但是它无法解决循环引用的问题,因此在Java中并没…

    2022年4月18日
    50
  • ceph介绍_ceph为什么用rgw

    ceph介绍_ceph为什么用rgw一、Ceph简介:Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。ceph的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环

    2022年8月2日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号