1:ReturnValue只能返回0,1,-1这样的数据,局限性很大 ,而在存储过程中用OutPut参数,可以返回各种类型的数据,比较灵活方便。
ReturnValue 是用来返回错误码的,output是指存储过程传出参数 例如 :
@Flag varchar(20) output
sql存储过程:
create proc Test
@B varchar(50) output,
@C varchar(50)
as
begin
declare @A int
set @B=@C+ 'Return'
set @A=1000
return @A
end
@B varchar(50) output,
@C varchar(50)
as
begin
declare @A int
set @B=@C+ 'Return'
set @A=1000
return @A
end
c#程序代码:
System.Data.SqlClient.SqlConnection conn =
new System.Data.SqlClient.SqlConnection(
"server=(local);uid=sa;pwd=sa;database=ServerUForVhost1");
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand( "Test", conn);
comm.CommandType = System.Data.CommandType.StoredProcedure;
//调用sqlhelper时这样写,单独不行:comm.Parameters.Add(不能addsqlparameter[])
//SqlParameter[] parameter ={
// new System.Data.SqlClient.SqlParameter("@A",System.Data.SqlDbType.Int,4),
// new System.Data.SqlClient.SqlParameter("@B",System.Data.SqlDbType.VarChar,50),
// new System.Data.SqlClient.SqlParameter("@C",System.Data.SqlDbType.VarChar,50)
// };
//parameter[2].Direction = ParameterDirection.Input;
// parameter[0].Direction = ParameterDirection.ReturnValue;
// parameter[1].Direction = ParameterDirection.Output;
comm.Parameters.Add( new System.Data.SqlClient.SqlParameter( "@A", System.Data.SqlDbType.Int, 4));
comm.Parameters["@A"].Direction = ParameterDirection.ReturnValue;
comm.Parameters.Add( new System.Data.SqlClient.SqlParameter( "@B", System.Data.SqlDbType.VarChar, 50));
comm.Parameters["@B"].Direction = ParameterDirection.Output;
comm.Parameters.Add( new System.Data.SqlClient.SqlParameter( "@C", System.Data.SqlDbType.VarChar, 50));
comm.Parameters[ "@C"].Value = "insertmsg";
conn.Open();
int i = comm.ExecuteNonQuery();
string result1 = comm.Parameters[ "@A"].Value.ToString();
string result2 = comm.Parameters[ "@B"].Value.ToString();
conn.Close();
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand( "Test", conn);
comm.CommandType = System.Data.CommandType.StoredProcedure;
//调用sqlhelper时这样写,单独不行:comm.Parameters.Add(不能addsqlparameter[])
//SqlParameter[] parameter ={
// new System.Data.SqlClient.SqlParameter("@A",System.Data.SqlDbType.Int,4),
// new System.Data.SqlClient.SqlParameter("@B",System.Data.SqlDbType.VarChar,50),
// new System.Data.SqlClient.SqlParameter("@C",System.Data.SqlDbType.VarChar,50)
// };
//parameter[2].Direction = ParameterDirection.Input;
// parameter[0].Direction = ParameterDirection.ReturnValue;
// parameter[1].Direction = ParameterDirection.Output;
comm.Parameters.Add( new System.Data.SqlClient.SqlParameter( "@A", System.Data.SqlDbType.Int, 4));
comm.Parameters["@A"].Direction = ParameterDirection.ReturnValue;
comm.Parameters.Add( new System.Data.SqlClient.SqlParameter( "@B", System.Data.SqlDbType.VarChar, 50));
comm.Parameters["@B"].Direction = ParameterDirection.Output;
comm.Parameters.Add( new System.Data.SqlClient.SqlParameter( "@C", System.Data.SqlDbType.VarChar, 50));
comm.Parameters[ "@C"].Value = "insertmsg";
conn.Open();
int i = comm.ExecuteNonQuery();
string result1 = comm.Parameters[ "@A"].Value.ToString();
string result2 = comm.Parameters[ "@B"].Value.ToString();
conn.Close();
结果为: result1=1000;result2=insertmsgResult