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

asp.net 连接出错解决方案

2013-12-20 
asp.net 连接出错public static SqlConnection conn new SqlConnection(ConfigurationManager.Connectio

asp.net 连接出错


public static SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ToString());

    public static int RunProcstr(string procName, params SqlParameter[] prams)
    {
        try
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            SqlCommand cmd = new SqlCommand(procName, conn);
            cmd.CommandType = CommandType.StoredProcedure;
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    cmd.Parameters.Add(parameter);
                }
            }
            if (cmd == null) return -1;
            cmd.ExecuteNonQuery();
            return 1;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        finally
        {
            conn.Close();
        }
    }

    public static int RunProcdsstr(string procName, ref DataSet ds, params SqlParameter[] prams)
    {
        SqlDataAdapter da = null;
        try
        {
            if (null == ds) ds = new DataSet();
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            da = new SqlDataAdapter(procName, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    da.SelectCommand.Parameters.Add(parameter);
                }
            }
            if (da == null) return -1;
            da.Fill(ds);
            return 1;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        finally
        {
            conn.Close();
            da.Dispose();
        }
    }



帮我看看有什么问题,谢谢。
我写了上面的两个函数。在查询数据的时候调用。当点击查询时,如果数据量很大,系统还在查询。这是当我用另外一台电脑进行查询的时候就会报错。
大概的错误是这样的

已有打开的与此命令相关联的 DataReader,必须首先将它关闭。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
源错误: 
行 145:            try
行 146:            {  
行 147:                cmd.ExecuteNonQuery();
行 148:                return 1;
行 149:            }

这个是怎么回事啊,谢谢了
[解决办法]
引用:

public static SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ToString());

    public static int RunProcstr(string procName, params SqlParameter[] prams)
    {
        try
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            SqlCommand cmd = new SqlCommand(procName, conn);
            cmd.CommandType = CommandType.StoredProcedure;
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    cmd.Parameters.Add(parameter);
                }
            }
            if (cmd == null) return -1;
            cmd.ExecuteNonQuery();
            return 1;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        finally
        {
            conn.Close();
        }
    }

    public static int RunProcdsstr(string procName, ref DataSet ds, params SqlParameter[] prams)
    {
        SqlDataAdapter da = null;
        try
        {
            if (null == ds) ds = new DataSet();
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            da = new SqlDataAdapter(procName, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;



            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    da.SelectCommand.Parameters.Add(parameter);
                }
            }
            if (da == null) return -1;
            da.Fill(ds);
            return 1;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        finally
        {
            conn.Close();
            da.Dispose();
        }
    }


帮我看看有什么问题,谢谢。
我写了上面的两个函数。在查询数据的时候调用。当点击查询时,如果数据量很大,系统还在查询。这是当我用另外一台电脑进行查询的时候就会报错。
大概的错误是这样的

已有打开的与此命令相关联的 DataReader,必须首先将它关闭。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
源错误: 
行 145:            try
行 146:            {  
行 147:                cmd.ExecuteNonQuery();
行 148:                return 1;
行 149:            }

这个是怎么回事啊,谢谢了


检查DataReader是否都关闭了。close(),有的地方是否遗漏了!!!
[解决办法]
conn.Close();
            da.Dispose();

把这2个写到catch里面
[解决办法]
在就是优化sql语句 把*号之类的改成必须的字段
[解决办法]
引用:
conn.Close();
da.Dispose();

把这2个写到catch里面

这样在异常的时候也可以关掉
[解决办法]
da.Fill(ds);

cmd.ExecuteNonQuery();  这两个后面

热点排行