当前位置:编程学习 > asp >>

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

 

一、为什么存储过程总返回-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

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,