在网上搜了一下,就知道怎么用了。
Input 此参数只用于将信息从应用程序传输到存储过程。
InputOutput 此参数可将信息从应用程序传输到存储过程,并将信息从存储过程传输回应用程序。
Output 此参数只用于将信息从存储过程传输回应用程序。
ReturnValue 此参数表示存储过程的返回值。SQL Server 的存储过程参数列表中不显示该参数。它只与存储过程的 RETURN 语句中的值相关联。
存储过程为主键生成新值后,通常使用存储过程中的 RETURN 语句返回该值,因此用来访问该值的参数类型是 ReturnValue 参数。
ReturnValue 参数与其他类型的参数有一个重要的区别。通常,在 ADO.NET 中为 Command 对象配置的参数的顺序并不重要。参数名称只用来与存储过程中相应的参数相匹配。但是,对于 ReturnValue 参数,它必须是列表中的第一个参数。
也就是说,为 Command 对象配置 ReturnValue 参数时,必须首先在代码中配置该参数,这样它才能获取集合中的第一个数字索引。如果先配置任何其他参数,ReturnValue 参数将不能正常工作。
呵呵,这样就可以了
args[0].Direction = ParameterDirection.ReturnValue;
取回值的时候用args[0].Value.ToString()
B.获得SQL-server存储过程的返回值存储过程为:
/// c#code,获得SQL-server存储过程的返回值
///<summary>
SqlParameter[] sp = new SqlParameter[5 ];
sp[0]=new SqlParameter("@Name" ,SqlDbType.VarChar);
sp[0].Value=this .TextName.Text;
sp[1]=new SqlParameter("@Text" ,SqlDbType.Text);
sp[1].Value=this .TextTxt.Text;
sp[2]=new SqlParameter("@Comment" ,SqlDbType.Text);
sp[2].Value=this .TextComment.Text;
sp[3]=new System.Data.SqlClient.SqlParameter("ReturnValue",System.Data.SqlDbType.Int,4,System.Data.ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null );
//参数"ReturnValue",System.Data.ParameterDirection.ReturnValue声明此参数为返回值。
sp[4]=new SqlParameter("@Type" ,SqlDbType.Int);
sp[4].Value=int.Parse(this .ClickBox.SelectedItem.Value);
_SQL.ExecuteSP("us_styletextnew" ,sp);
// 使用sp[3].Value.ToString()即可!
存储过程为:
@id int=0 ,
@Name varchar(50 ),
@Text text ,
@Comment text ,
@Type int
AS
SET NOCOUNT ON
IF not EXISTS(SELECT [Name] FROM [dbo].[iStyle] WHERE [Name] = @Name )
BEGIN
INSERT INTO
[dbo].[iStyle]
([Name] ,
[Text] ,
[Comment] ,
[Type] )
VALUES
( @Name,@Text,@Comment,@Type )
SET @id = SCOPE_IDENTITY ()
END
RETURN @id
GO
希望对刚学存储过程的朋友有点帮助!
用过SQLHelper的朋友,一定很怀疑SQLHelper怎么不能执行带输出、返回参数的存储过程呢?请参考 http://blog.joycode.com/ghj/archive/2004/04/12/19015.aspx
此文并没有做成相应的解决方法,所以这也是写本文的一个出发点。原因值需要修改存储过程中RETURN @id为SELECT @id,取值采用SqlHelper.ExecuteScalar 方法.其中原理并没有违背SqlHelper.ExecuteScalar取第一行一列的值。
string aa= SqlHelper.ExecuteScalar(SqlHelper.CONN_STRING,"PRO_Table1_OPER",sp).ToString();
C.如何在存储过程中引用别的存储过程返回的表
1. 一般的方法认为只有把存储过程返回的值,写入一个结构相同的
辅助表中,如下:
create procedure proc1
as
begin
create table #t(...) --表结构同被调用存储过程返回结果集的结构
insert #t exec proc2
select * from #t left join table on ...
end
go
2。还有一个方面就是用openrowset(不过就是速度不怎么样)
select * from openrowset('sqloledb'
,'Trusted_Connection=yes'
,'exec sp_who') -- 这里是你要调用的存储过程
参考文献 :http://www.linkui.cn/read-20.html
http://blog.joycode.com/ghj/archive/2004/04/12/19015.aspx
辅助表中,如下:
create procedure proc1
as
begin
create table #t(...) --表结构同被调用存储过程返回结果集的结构
insert #t exec proc2
select * from #t left join table on ...
end
go
2。还有一个方面就是用openrowset(不过就是速度不怎么样)
select * from openrowset('sqloledb'
,'Trusted_Connection=yes'
,'exec sp_who') -- 这里是你要调用的存储过程

本文介绍了在.NET中通过ADO.NET获取SQL Server存储过程返回值的方法。详细解释了Input、InputOutput、Output及ReturnValue参数的区别及应用,并给出了具体的C#代码示例。
948

被折叠的 条评论
为什么被折叠?



