C# 接受存储过程返回来的参数

来源:互联网 发布:淘宝手机单怎么做刷 编辑:程序博客网 时间:2024/05/16 13:48

1.       创建存储过程以 output 的方式

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].proRet') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].MYSQL

GO

Create PROCEDURE proRet

     @a nvarchar(50),

     @b nvarchar(50),

     @c nvarchar(200) output

AS

     Set @c = @a + @b

GO

C#程序如下:

        using (SqlConnection con = new SqlConnection(DbHelperSQL.connectionString))

        {

            con.Open();

            SqlCommand MyCommand = new SqlCommand("proRet", con);

            MyCommand.CommandType = CommandType.StoredProcedure;

            MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.NVarChar));

            MyCommand.Parameters["@a"].Value = "abcdefg";

            MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.NVarChar));

            MyCommand.Parameters["@b"].Value = "AAAAA";

            MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.NVarChar,200));

            MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;

            MyCommand.ExecuteNonQuery();

            Response.Write(MyCommand.Parameters["@c"].Value.ToString());

        }

 

请注意:

SQL Server 2005中,使用存储过程时,传入参数可以不指定长度,但是传出参数必须指定长度

 

----------------------存储过程共有三种返回值-------------------

/*(一)、参数返回值@parm2

(二)、过程返回值return 100

(三)、数据集返回值select * from table1 where age = @parm1

请问,如何得到三类返回值?

*/

create table table1(

name varchar(30),

age integer,

primary key(name, age)

)

create procedure proc1

@parm1 integer,

@parm2 varchar(30) output

as

select @parm2 = 'zhongguo'

select * from table1 where age = @parm1

return 100

--(一)、参数返回值@parm2

declare @re varchar(30)

exec proc1 1,@re out

select 返回结果=@re

--(二)、过程返回值return 100

declare @re int,@parm2 varchar(30)

exec @re=proc1 1,@parm2 out

select 返回结果=@re

--(三)、数据集返回值select * from table1 where age = @parm1

--定义返回结果保存的临时表(因为是返回记录集,所以要用临时表)

--调用返回结果

--declare @re varchar(30)

--insert #re exec proc1 1,@re out

select * into #re from OPENROWSET('SQLOLEDB',

'SERVER=zhou;uid=sa;pwd=zhou;Database=pubs','SET FMTONLY OFF;SET NOCOUNT ON declare @re varchar(30) exec proc1 ''1'',@re out') as a

--显示结果

select * from #re

--处理完成后删除临时表

drop table #re