StoredProcedure「建议收藏」

2022-09-18 10:59:43 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

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

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

它的特点是:

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

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

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

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

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

6,减少网络通信量。

7,可以使用安全机制。

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

我们可以使用visual studio的Server Explorer,来查看StoredProcedure。

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

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandText=”sp_Select_AllEmployees”;

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

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

Parameter 对象可以使用 Parameter 构造函数来创建,或通过调用 CommandParameters 集合的 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:用来捕捉StoredProcedure的Return值。

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

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

1,StoredProcedure:

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.cn/164499.html原文链接:https://javaforall.cn

0 人点赞