小编Mat*_*att的帖子

C#DataBase.ExecuteScalar中的连接泄漏

静态类中的以下方法给出了超时异常,因为连接池被最大化.

在调试模式下,我查看了sql Management studio,看到有150个睡眠进程.

我期望连接自动关闭...我也试过把它作为一个静态成员,但仍然有相同的错误.

有任何想法吗?继承人代码:

public static Decimal ExecuteScalarDec(string procName, params object[] parameters)
{
    try
    {
        return (Decimal)DatabaseFactory.CreateDatabase().ExecuteScalar(procName, parameters);
    }
    catch (Exception ex)
    {
        throw new Exception(procName.ToString() + " " + parameters.ToString(), ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

"按照设计,大多数Database类方法在每次调用时都会处理数据库连接的打开和关闭.因此,应用程序代码不需要包含用于管理连接的代码." ExecuteReader是一个例外(因为它返回一个资源).ExecuteScalar处于不确定状态:它返回一个'标量'.但是,我猜标量可能很重,例如.从大型数据类型返回构造的流,这将需要保持打开的连接. - Remus Rusanu

我无法评论你的答案,因为它说"评论需要50个声誉"我注册了我的用户后......

我在executeScalar()中返回一个列Id并且返回了值 - 我知道这是因为下一次执行标量的调用仅在我收到一个值后被调用...它不会理解为流将是永远保持开放我在sql Management中看到所有进程都在休眠.

c# sql database enterprise-library executescalar

4
推荐指数
1
解决办法
5736
查看次数

标签 统计

c# ×1

database ×1

enterprise-library ×1

executescalar ×1

sql ×1