2023年6月21日发(作者:)
存储过程输出参数、返回值、返回表及C#调⽤存储过程中可以定义输出变量,返回值,执⾏存储过程还能获得结果集。每个存储过程的默认返回值为0。下⾯紧接着上⽂ 基础上写的⼀个新的Stored Procedure存储过程则包含了输出参数、返回值以及select结果。USE [db]GO/****** Object: StoredProcedure [dbo].[insert_persions] Script Date: 2/25/2015 11:14:11 AM ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOIF OBJECT_ID ('get_persons','p') IS NOT NULL DROP PROCEDURE get_persons;GO-- =============================================-- Author:
输出参数的定义位置和存储过程的⼀般参数⼀样,只不过会在后⾯增加⼀个OUTPUT关键字。在过程体中然后给参数使⽤SET指定输出值。执⾏包含输出参数得到过程体的SQL语句中,也需要先定义变量,再将变量作为参数传⼊执⾏语句中同时加上OUTPUT。如上例⼦所⽰:EXECUTE get_persons “San”,@ret = @retVal OUTPUT返回值
存储过程⼀般会有默认的返回值为0,但是我们也可以在过程体要结束的位置或者某个分⽀块结束语句处加上RETURN VALUE语句。
执⾏过程体的时候,如果需要同时获取得到的返回值,可以先定义变量,再使⽤“变量=”放在EXECUTE后⾯从⽽获得执⾏结果值。例⼦就是:EXECUTE
@status = get_persons “San”,@ret = @retVal OUTPUT上述例⼦中的存储过程语句在SQL Server Management Studio执⾏完毕后,会每个select语句⽣成⼀个Table结果,如下图所⽰:
C#调⽤
上⾯例⼦中给出了SQL语句应对输出参数、返回值及SELECT表的情况。如果我们需要⽤C#来执⾏存储过程同时也希望得到所有的这些结果,可以按如下代码来: String conStr = @"Data Source=HOSTSQLEXPRESS;Initial Catalog=DB;Integrated Security=SSPI"; SqlConnection con = new SqlConnection(conStr); try { (); ine("Connect Sucess!"); SqlCommand com = new SqlCommand(); dType = Procedure; tion = con; dText = "get_persons"; SqlParameter pFirstName = new SqlParameter("@firstname", "San"); SqlParameter para = new SqlParameter("@ret", ); ion = ;
(pFirstName); (para); ("@status", ); ters["@status"].Direction = Value; SqlDataReader sdr = eReader(); while (()) { for (int i = 0; i < ount; i++) (sdr[i].ToString() + " "); ine(); } (); ine(ters["@ret"].Value); ine(ters["@status"].Value); } catch (Exception e) { ine(ng()); } finally { (); }从中我们可以看出,对于输出参数和返回值,都是增加与存储过程⼀样的参数名及类型,同时指定ParameterDirection,分别为OUTPUT和RETURNVALUE。⽽获取执⾏结果则可以再命令执⾏完毕后获取命令参数的值“ters[“@ret”].Value”。对于⽆需获取SELECT结果的情况,我们可以直接⽤命令ExecuteNonQuery即可。可是如果我们还想得到存储过程执⾏所得到的表结果呢?这时候⼀个办法是利⽤“SqlDataReader sdr = eReader();”执⾏然后通过()来读取SELECT结果。这⾥需要注意的是,根据个⼈实践,sdr读完需要关系后才能够获取到返回参数及返回值。
2023年6月21日发(作者:)
存储过程输出参数、返回值、返回表及C#调⽤存储过程中可以定义输出变量,返回值,执⾏存储过程还能获得结果集。每个存储过程的默认返回值为0。下⾯紧接着上⽂ 基础上写的⼀个新的Stored Procedure存储过程则包含了输出参数、返回值以及select结果。USE [db]GO/****** Object: StoredProcedure [dbo].[insert_persions] Script Date: 2/25/2015 11:14:11 AM ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOIF OBJECT_ID ('get_persons','p') IS NOT NULL DROP PROCEDURE get_persons;GO-- =============================================-- Author:
输出参数的定义位置和存储过程的⼀般参数⼀样,只不过会在后⾯增加⼀个OUTPUT关键字。在过程体中然后给参数使⽤SET指定输出值。执⾏包含输出参数得到过程体的SQL语句中,也需要先定义变量,再将变量作为参数传⼊执⾏语句中同时加上OUTPUT。如上例⼦所⽰:EXECUTE get_persons “San”,@ret = @retVal OUTPUT返回值
存储过程⼀般会有默认的返回值为0,但是我们也可以在过程体要结束的位置或者某个分⽀块结束语句处加上RETURN VALUE语句。
执⾏过程体的时候,如果需要同时获取得到的返回值,可以先定义变量,再使⽤“变量=”放在EXECUTE后⾯从⽽获得执⾏结果值。例⼦就是:EXECUTE
@status = get_persons “San”,@ret = @retVal OUTPUT上述例⼦中的存储过程语句在SQL Server Management Studio执⾏完毕后,会每个select语句⽣成⼀个Table结果,如下图所⽰:
C#调⽤
上⾯例⼦中给出了SQL语句应对输出参数、返回值及SELECT表的情况。如果我们需要⽤C#来执⾏存储过程同时也希望得到所有的这些结果,可以按如下代码来: String conStr = @"Data Source=HOSTSQLEXPRESS;Initial Catalog=DB;Integrated Security=SSPI"; SqlConnection con = new SqlConnection(conStr); try { (); ine("Connect Sucess!"); SqlCommand com = new SqlCommand(); dType = Procedure; tion = con; dText = "get_persons"; SqlParameter pFirstName = new SqlParameter("@firstname", "San"); SqlParameter para = new SqlParameter("@ret", ); ion = ;
(pFirstName); (para); ("@status", ); ters["@status"].Direction = Value; SqlDataReader sdr = eReader(); while (()) { for (int i = 0; i < ount; i++) (sdr[i].ToString() + " "); ine(); } (); ine(ters["@ret"].Value); ine(ters["@status"].Value); } catch (Exception e) { ine(ng()); } finally { (); }从中我们可以看出,对于输出参数和返回值,都是增加与存储过程⼀样的参数名及类型,同时指定ParameterDirection,分别为OUTPUT和RETURNVALUE。⽽获取执⾏结果则可以再命令执⾏完毕后获取命令参数的值“ters[“@ret”].Value”。对于⽆需获取SELECT结果的情况,我们可以直接⽤命令ExecuteNonQuery即可。可是如果我们还想得到存储过程执⾏所得到的表结果呢?这时候⼀个办法是利⽤“SqlDataReader sdr = eReader();”执⾏然后通过()来读取SELECT结果。这⾥需要注意的是,根据个⼈实践,sdr读完需要关系后才能够获取到返回参数及返回值。
发布评论