登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘物峰寒山拾得

2007.01.25(给予越多,聚积越多)

 
 
 

日志

 
 

为什么存储过程总返回-1 取存储过程的值 取数据集  

2009-11-23 15:55:12|  分类: DataBase |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、为什么存储过程总返回-1

你是用ExecuteNonQuery进行“添加”操作的把?

ExecuteNonQuery 不返回任何行数据,但映射到参数的任何输出参数或返回值都会用数据进行填充。
对于查询更新删除操作 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。
对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1

如果执行了存储过程,返回值必定是-1 , 因此不能根据返回值来判断其是否执行成功。

以上引用(CSDN:benbirdar的发言)

二、取存储过程的值            

   过程:

ALTER PROCEDURE [dbo].[Up_B_EQCalculation]

     @AmmId          varchar(18)='',

     @RtuCode        varchar(12)='',

     @Caltime datetime,

     @Total        decimal(18, 2),

     @ReEQ         decimal(18, 2)=0  OUTPUT

 

         

            SqlParameter dSQLPara = new SqlParameter ( "@ReEQ" , SqlDbType.Decimal );

            dSQLPara.Direction = ParameterDirection.Output;

            cmd.Parameters.Add ( dSQLPara );

 

            cmd.CommandText = "Up_B_EQCalculation";

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.ExecuteReader( );

            cmd.Connection.Close ( );

 

            strReturn = dSQLPara.Value.ToString ( ); //返回值

 

三、取数据集

 string cnstr="data source=.;initial catalog=company;persist security info=False;user id=sa;pwd=sa;";

        private SqlCommand cm=new SqlCommand ( ); //建立Command对象

        //运行存储过程返回DataSet

        public DataSet runSPDataSet ( string StoredProcedureName )

        {

            cm.Connection = new SqlConnection ( cnstr );

            cm.Connection.Open ( );

            cm.CommandText = StoredProcedureName;

            cm.CommandType = CommandType.StoredProcedure;

            try

            {

                SqlDataAdapter da=new SqlDataAdapter ( cm );

                DataSet DS=new DataSet ( );

                da.Fill ( DS );

                return DS;

            }

            catch ( Exception ex )

            {

                throw ex;

            }

            finally

            {

                cm.Connection.Close ( );

            }

        }

        //通过传入的存储过程的名称来执行存储过程,把返回的第一个记录集里的第一条记录放在Object 数组里。

        //多用在显示详细信息里,因为这种情况大多都是只用一条记录的。如果是空的话返回 strValue[0]="null"

 

        //运行存储过程返回第一条记录的数组

        public Object [ ] runSPItems ( string StoredProcedureName )

        {

            Object[] strValue=new Object [ 1 ];

            cm.CommandText = StoredProcedureName;

            cm.CommandType = CommandType.StoredProcedure;

            try

            {

                cm.Connection.Open ( );

                SqlDataReader r =  cm.ExecuteReader ( CommandBehavior.CloseConnection );

                if ( r.Read ( ) )

                {

                    strValue = new Object [ r.FieldCount ];

                    r.GetValues ( strValue );

                }

                else

                {

                    strValue [ 0 ] = "null";

                } r.Close ( );

            }

            catch ( Exception ex )

            {

                throw ex;

            }

            finally

            {

                cm.Connection.Close ( );

            }

            return strValue;

        }

 

 

  评论这张
 
阅读(806)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018