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

【新人】ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭

2013-12-02 
【新人求助】ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。public int RunProc(string pro

【新人求助】ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭。
【新人】ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭

    public int RunProc(string procName, SqlParameter[] prams)
    {
        SqlCommand cmd = CreateCommand(procName, prams);
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            SystemError.SystemLog(ex.Message);
        }
        Close();
        return (int)cmd.Parameters["ReturnValue"].Value;
    }

    public void RunProc(string procName, out SqlDataReader dataReader)
    {
SqlCommand cmd = CreateCommand(procName, null);
        dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }

    public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
    {
        SqlCommand cmd = CreateCommand(procName, prams);
        dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }

[解决办法]
Close();
你写了什么,是不是close了reader
那当然出错

int r = (int)cmd.Parameters["ReturnValue"].Value;
Close();
return r;
[解决办法]
你的连接呢?
SqlConnection对象在哪里,有没有调用Open()
[解决办法]
要显式调用数据库连接对象的open,要不然就会这样子
[解决办法]
引用:
Quote: 引用:

你的连接呢?
SqlConnection对象在哪里,有没有调用Open()

我的database.cs 都在这了    不太懂


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

/// <summary>
/// 通用的数据库处理类,通过ADO.NET与数据库连接
/// </summary>
public class Database:IDisposable
{
    private SqlConnection con;
public Database()
{
//
// TODO: Add constructor logic here
//
}

    /// <summary>
    /// 打开数据库连接
    /// </summary>
    private void Open()
    {
        if (con == null)
        {
            con = new SqlConnection(ConfigurationSettings.AppSettings["CONNECTIONSTRING"].ToString());
        }
        if (con.State == ConnectionState.Closed)
        {
            try
            {
                con.Open();
            }
            catch (Exception ex)
            {
                SystemError.SystemLog(ex.Message);
            }
        }
    }

    /// <summary>
    /// 关闭数据库连接
    /// </summary>


    public void Close()
    {
        if (con != null)
        {
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }
        }
    }

    public void Dispose()
    {
        if (con != null)
        {
            con.Dispose();
            con = null;
        }
    }

    /// <summary>
    /// 执行存储过程
    /// </summary>
    public int RunProc(string procName)
    {
        SqlCommand cmd = CreateCommand(procName, null);
        try
        {
            
cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            SystemError.SystemLog(ex.Message);
        }
        Close();
        return (int)cmd.Parameters["ReturnValue"].Value;
    }

    public int RunProc(string procName, SqlParameter[] prams)
    {
        SqlCommand cmd = CreateCommand(procName, prams);
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            SystemError.SystemLog(ex.Message);
        }
int r = (int)cmd.Parameters["ReturnValue"].Value;
        Close();
        return r;
    }

    public void RunProc(string procName, out SqlDataReader dataReader)
    {
SqlCommand cmd = CreateCommand(procName, null);
        dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }

    public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
    {
        SqlCommand cmd = CreateCommand(procName, prams);
        dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }

    /// <summary>
    /// 创建一个SqlCommand对象以此来执行存储过程
    /// </summary>
    private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
    {
        Open();
        SqlCommand cmd = new SqlCommand(procName, con);
        cmd.CommandType = 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));
        return cmd;
    }

    /// <summary>
    /// 生成存储过程参数


    /// </summary>
    public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
    {
        SqlParameter param;
        if (Size > 0)
        {
            param = new SqlParameter(ParamName, DbType, Size);
        }
        else
        {
            param = new SqlParameter(ParamName, DbType);
        }
        param.Direction = Direction;
        if (!(Direction == ParameterDirection.Output && Value == null))
        {
            param.Value = Value;
        }
        return param;
    }

    public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int Size, object Value)
    {
        return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
    }

    public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int Size)
    {
        return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);
    }

    public SqlParameter CreateReturnParam(string ParamName, SqlDbType DbType, int Size)
    {
        return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
    }

    public SqlDataReader ExecuteSQL(string sql)
    {
        SqlDataReader dr = null;
        Open();
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.CommandType = CommandType.Text;
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;
    }
}



仔细找找你的代码,比如数据库打开后,用完要关闭,dataread用完也要及时关闭。

这个是你代码存在没关闭的对象造成的,仔细检查下把!

热点排行