首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#调用存储过程不能取到返回值有关问题

2012-01-18 
c#调用存储过程不能取到返回值问题///summary///构建SqlCommand对象(用来返回一个结果集,而不是一个整数

c#调用存储过程不能取到返回值问题
///   <summary>
                ///   构建   SqlCommand   对象(用来返回一个结果集,而不是一个整数值)
                ///   </summary>
                ///   <param   name= "connection "> 数据库连接 </param>
                ///   <param   name= "storedProcName "> 存储过程名 </param>
                ///   <param   name= "parameters "> 存储过程参数 </param>
                ///   <returns> SqlCommand </returns>
                private   static   SqlCommand   BuildQueryCommand(SqlConnection   connection,   string   storedProcName,   IDataParameter[]   parameters)
                {
                        SqlCommand   command   =   new   SqlCommand(storedProcName,   connection);
                        command.CommandType   =   CommandType.StoredProcedure;
                        if   (parameters   !=   null)
                        {
                                foreach   (SqlParameter   parameter   in   parameters)
                                {
                                        if   (parameter   !=   null)
                                        {
                                                //   检查未分配值的输出参数,将其分配以DBNull.Value.
                                                if   ((parameter.Direction   ==   ParameterDirection.InputOutput   ||   parameter.Direction   ==   ParameterDirection.Input)   &&
                                                        (parameter.Value   ==   null))
                                                {
                                                        parameter.Value   =   DBNull.Value;
                                                }


                                                command.Parameters.Add(parameter);
                                        }
                                }
                        }

                        return   command;
                }


    ///   <summary>
                ///   执行存储过程     (使用该方法切记要手工关闭SqlDataReader和连接)
                ///   </summary>
                ///   <param   name= "storedProcName "> 存储过程名 </param>
                ///   <param   name= "parameters "> 存储过程参数 </param>
                ///   <returns> SqlDataReader </returns>
                public   static   SqlDataReader   RunProcedure(string   storedProcName,   IDataParameter[]   parameters)
                {
                        SqlConnection   connection   =   new   SqlConnection(connectionString);
                        SqlDataReader   returnReader;
                        connection.Open();
                        SqlCommand   command   =   BuildQueryCommand(connection,   storedProcName,   parameters);
                        command.CommandType   =   CommandType.StoredProcedure;
                        returnReader   =   command.ExecuteReader(CommandBehavior.CloseConnection);
                        //Connection.Close();   不能在此关闭,否则,返回的对象将无法使用                        
                        return   returnReader;

                }


    public   SqlDataReader   GetDividePageList(int   __PageIndex,int   __PageSize,string   __strFields,string   __TableName,string   __ID,string   __strWhere,string   __OrderSort,ref   int   __RecordCount,ref   int   __PageCount)
                {
                        SqlDataReader   dr   =   null;
                        SqlParameter[]   parameters   =   {
new   SqlParameter( "@PageIndex ",   SqlDbType.Int,4),


new   SqlParameter( "@PageSize ",   SqlDbType.Int,4),
new   SqlParameter( "@strFields ",   SqlDbType.VarChar,3000),
new   SqlParameter( "@TableName ",   SqlDbType.VarChar,500),
new   SqlParameter( "@ID ",   SqlDbType.VarChar,100),
new   SqlParameter( "@strWhere ",   SqlDbType.VarChar,3000),
new   SqlParameter( "@OrderSort ",   SqlDbType.VarChar,200),
new   SqlParameter( "@RecordCount ",   SqlDbType.Int,4),
new   SqlParameter( "@PageCount ",   SqlDbType.Int,4)};
                        parameters[0].Value   =   __PageIndex;
                        parameters[1].Value   =   __PageSize;
                        parameters[2].Value   =   __strFields;
                        parameters[3].Value   =   __TableName;
                        parameters[4].Value   =   __ID;
                        parameters[5].Value   =   __strWhere;
                        parameters[6].Value   =   __OrderSort;
                        parameters[7].Direction   =   ParameterDirection.Output;
                        parameters[8].Direction   =   ParameterDirection.Output;
                        dr   =   DbHelperSQL.RunProcedure( "SP_Page_GetPageData ",   parameters);
                        __RecordCount   =   Convert.ToInt32(parameters[7].Value);       这儿的返回值为null
                        __PageCount   =   Convert.ToInt32(parameters[8].Value);           这儿的返回值为null

                        return   dr;
                }

在VS2003里可以得到返回值,在VS2005里执行相同代码不能得到返回值。
什么原因得不到存储过程返回值?

[解决办法]
是得不到的,你关闭了连接就能得到了

热点排行