MS-SQL存储过程的使用

来源:互联网 发布:发那科数控车床编程 编辑:程序博客网 时间:2024/04/28 18:00

<script type="text/javascript"><!-- google_ad_client = "pub-4791287241396031"; /* 728x90, 创建于 09-7-29 */ google_ad_slot = "4018300068"; google_ad_width = 728; google_ad_height = 90;// --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>一、存储过程return与output区别
<1> 共同点:都能返回值(但return只能返回int类型,output能自定义类型,然后需定义成存储过程的变量,如 @out varchar output)
<2> 不同点:

1.output是定义变量
2.output没有return从查询或过程中无条件退出的工功
3.return返回值在函数和过程定义时不需要用output来定义

二、怎样在asp.net 中获取一个查询功能的存储过程的查询记录呢?

C#语言: CRM OA ERP
//(1)执行一个没有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(connectionString);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcedure";
da.selectCommand.CommandType = CommandType.StoredProcedure;

//(2)执行一个有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(connectionString);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcedure";
da.selectCommand.CommandType = CommandType.StoredProcedure;
//若需要添加输入参数@Username:
param = new SqlParameter("@Username", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = username;
da.selectCommand.Parameters.Add(param);

//若需要添加输出参数@out:
param = new SqlParameter("@out", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output; '输出参数
//执行查询语句: comm.ExecuteNonQuery();
int Out=param.Value;

//若要获得参储过程的返回值:@RETURN_VALUE是默认的返回参数
param = new SqlParameter("@RETURN_VALUE", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue; '返回值:

//执行查询语句: comm.ExecuteNonQuery();
int Out=param.Value; //Out就是返回参数值
================

三、例子
例1: 下面的存储过程实现用户验证的功能,如果不成功,返回0,成功则返回1.

SQL语言: CRM OA ERP
CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
AS
IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)
SELECT @LEGAL = 1
ELSE
SELECT @LEGAL = 0
在程序中调用该存储过程,并根据@LEGAL参数的值判断用户是否合法。

.net 中显示返回值主要代码
C#语言: CRM OA ERP
comm.Parameters.Add("@LEGAL", 0);
comm.Parameters["@LEGAL"].Direction = ParameterDirection.Output;
comm.ExecuteNonQuery(); //ExecuteNonQuery:返回影响的行数 i = (int)comm.Parameters["@LEGAL"].Value;
Response.Write(i.ToString());
例2:返回存储过程OUTPUT参复和RETURN返回值的原代码
SQL语言: CRM OA ERP
ALTER PROCEDURE sp_2
@p int output,
@p1 int,
@p2 int
as
set @p = @p1+@p2
return 99
C#语言: CRM OA ERP
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.CommandText = "sp_2";
cmd.CommandType = CommandType.StoredProcedure;
//@return_value 这个参数在输入参数的最前面,名称是固定的
SqlParameter param=cmd.CreateParameter("@return_value", adInteger, adParamReturnValue);
cmd.Parameters.Add(param);
'输入和输出的参数顺序同存储过程的参数顺序
C#语言: CRM OA ERP
param=cmd.CreateParameter("@p", adInteger, adParamOutput);
cmd.Parameters.Add(param);
param= cmd.CreateParameter("@p1", adInteger, adParamInput,,1)
cmd.Parameters.Add(param);
param=cmd.CreateParameter("@p2", adInteger, adParamInput,,2)

cmd.ExecuteNonQuery();
For i = 0 To cmd.Parameters.Count - 1
for( int i;i<cmd.Parameters.Count - 1,i++)
Response.write(cmd.Parameters(i).Name & "=" & cmd.Parameters(i).Value)
cmd.Connection.Close();
结果:
@return_value=99
@p=3
@p2=2
@p1=1

四、如何在存储过程中调用存储过程?
SQL语言: CRM OA ERP
create table test(id int,name varchar(10))
insert into test select 1,'AAAA'
insert into test select 2,'BBBB'
go
create procedure sp_test1(@count int output)
as
select @count=count(*) from test
go
create procedure sp_test2
as
begin
declare @count int
exec sp_test1 @count output
select @count
end
go
exec sp_test2
go
--输出结果
/*
2
*/

选CRM OA ERP SCM 进销存 等软件,上星烛网! http://www.xingzhu.net.cn 

<script type="text/javascript"><!-- google_ad_client = "pub-4791287241396031"; /* 728x90, 创建于 09-7-29 */ google_ad_slot = "4018300068"; google_ad_width = 728; google_ad_height = 90;// --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
原创粉丝点击