日期:2014-05-18  浏览次数:20492 次

通过SqlCommand执行sqlserver的存储过程,无法获得返回的字符串么?
同时返回的int   类型可见,   而且在sql查询分析器中执行该存储过程可以获得返回的字符串。

存储过程如下:
Create   procedure   dbo.saveStockOut    
(
                @Code   varchar(20),
@Project_NO   varchar(20),
                @PR_NO   varchar(20),
@Quantity   int,
                @RetMessage   varchar(100)   output,
                @RetValue   int   output
)
AS
        DECLARE   @Out_Date   datetime
        DECLARE   @Count   int
        DECLARE   @StockQuantity   int  
        DECLARE   @StockReserved   int      
        DECLARE   @Reserved_Qty   int  
BEGIN
        select   @Count=count(*)   from   StockOut   where   Code   =   @Code   and   Project_NO=@Project_NO   and   PR_NO=@PR_NO
        if   (@Count> 0)
        begin
              set   @RetValue   =   -1;
              set   @RetMessage   =   '数据库中已有该出库单! ';
              RETURN  
        end;
End

SqlCommand   cmd   =   new   ……
                cmd.Parameters.Add( "@Code ",   SqlDbType.Char);
                cmd.Parameters.Add( "@Project_NO ",   SqlDbType.Char);
                cmd.Parameters.Add( "@PR_NO ",   SqlDbType.Char);
                cmd.Parameters.Add( "@Quantity ",   SqlDbType.Int);
                cmd.Parameters.Add( "@RetMessage ",   SqlDbType.Char).Direction   =   ParameterDirection.Output;
                cmd.Parameters.Add( "@RetValue ",   SqlDbType.Int).Direction   =   ParameterDirection.Output;  

_conn.Open();
          cmd.CommandType   =   CommandType.StoredProcedure;   //   指示使用存储过程

                cmd.ExecuteNonQuery();

if   (cmd.Parameters[ "@RetMessage "].Value!=null)
                                retMsg   =   (string)cmd.Parameters[ "@RetMessage "].Value;
                        RetValue   =   (int)cmd.Parameters[ "@RetValue "].Value;



------解决方案--------------------
1。
Command 的参数类型使用错了

> > >

cmd.Parameters.Add( "@Code ", SqlDbType.VarChar, 20);
cmd.Parameters.Add( "@Project_NO ", SqlDbType.VarChar, 20);
cmd.Parameters.Add( "@PR_NO ", SqlDbType.VarChar, 20);
cmd.Parameters.Add