标题:ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Closed
只看楼主
jp51986
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-19
 问题点数:0 回复次数:4 
ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Closed
public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
        {
//            try
//            {
//                this.con.Open();
                SqlCommand cmd = CreateCommand(procName, prams);------就是这句报错
                dataReader = cmd.ExecuteReader(System.);
//            }
//            catch(Exception ex)
//            {
//                SystemError.SystemLog(ex.Message);
//            }
        }
        
        /// <summary>
        /// 创建一个SqlCommand对象以此来执行存储过程
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <returns>返回SqlCommand对象</returns>
        private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
        {
            // 确认打开连接
            Open();
            
            SqlCommand cmd = new SqlCommand(procName, con);
             = CommandType.StoredProcedure;

            // 依次把参数传入存储过程
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    cmd.Parameters.Add(parameter);
                }
            }
            
            // 加入返回参数
            cmd.Parameters.Add(
                new SqlParameter("ReturnValue", SqlDbType.Int, 4,
                ParameterDirection.ReturnValue, false, 0, 0,
                string.Empty, DataRowVersion.Default, null));

            ///返回创建的SqlCommand对象
            return cmd;
        }
        
        /// <summary>
        /// 生成存储过程参数
        /// </summary>
        /// <param name="ParamName">存储过程名称</param>
        /// <param name="DbType">参数类型</param>
        /// <param name="Size">参数大小</param>
        /// <param name="Direction">参数方向</param>
        /// <param name="Value">参数值</param>
        /// <returns>新的 parameter 对象</returns>
        public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
        {
            SqlParameter param;

            ///当参数大小为0时,不使用该参数大小值
            if(Size > 0)
            {
                param = new SqlParameter(ParamName, DbType, Size);
            }
            else
            {
                ///当参数大小为0时,不使用该参数大小值
                param = new SqlParameter(ParamName, DbType);
            }

            ///创建输出类型的参数
            param.Direction = Direction;
            if (!(Direction == ParameterDirection.Output && Value == null))
            {
                param.Value = Value;
            }

            ///返回创建的参数
            return param;
        }

cc.GIF (20.77 KB)


cc.GIF (20.77 KB)
搜索更多相关主题的帖子: Closed 状态 summary cmd procName 
2008-01-09 18:37
jp51986
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-19
得分:0 
哦  刚才没注意 发了两张图
 如果看不清楚  点击它即可!!!
 谢谢各位了!!!

不积跬步,无以至千里;不积小流,无以成江海。
2008-01-09 18:41
jp51986
Rank: 1
来 自:湖北武汉
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-19
得分:0 
对了  我后来加了个 try....catch语句后  
  它又报了个D:\Downloads\OfficeAuto\Components\Database.cs(134): 控制离开当前方法之前必须对输出参数“dataReader”赋值

 真是晕  我搞了半天都搞不定  希望各位高手解答

不积跬步,无以至千里;不积小流,无以成江海。
2008-01-09 18:45
linzhiqiao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-3-14
得分:0 
楼主,我也是遇到同样的这个问题,请问你最后是怎样解决的?
2008-03-14 10:20
191638141
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2008-1-5
得分:0 
个人认为:
1.开始你把Open() 注释掉而来 固然没打开连接
2.你加上try..后抱错 可以发现你的dataReader没有定义类型
  后面的cmd.ExecuteReader(..);返回的是一个sqldatareader类型
2008-03-14 11:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-196725-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.194817 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved