今天在新公司发现这样的代码,是不是有错误

public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connString);
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;

            }
            catch (Exception ex)
            {
                conn.Close();
                throw ex;
            }
        }

 怎样修改好呢,现在发现经常有超时的现象,数据库连接池已满的现象

幕布斯7119047
浏览 458回答 10
10回答

拉丁的传说

看看是不是在用完SqlDataReader之后有没有即时关闭。 另外看看超时的sql语句是不是可以优化。

繁花不似锦

全局用一个SqlConnection不行吗.SqlCommand.CommandTimeout 设置长一点就不超时了.

婷婷同学_

把数据库链接池设置大一点.

波斯汪

conn open后没有Close

米脂

Please check the cmdText

当年话下

这不就是SqlHelper么……看看外面用的时候有没有SqlDataReader给Dispose掉,其他不会有问题的

凤凰求蛊

在使用SqlDataReader的时候使用Using块括起来就不会忘记关闭了,养成这个习惯就好了

RISEBY

1:using 和try catch 双剑合一 2:优化sqlserver[查询计划] 3:优化连接池..................

慕斯王

在finally{} 里面判断是否关闭了reader和connection。如果没有,则关闭,就不会出现异常了

holdtom

SqlDataReader rdr; try { ...... } catch (Exception ex) { throw ex; } finally { conn.Close(); } return rdr;
打开App,查看更多内容
随时随地看视频慕课网APP