表单提交后清除Webmatrix.Data.Database连接字符串

时间:2014-03-19 19:43:30

标签: asp.net connection-string asp.net-webpages

我正在开发一个ASP.NET(Razor v2)网站,并使用WebMatrix.Data库连接到远程数据库。我把数据库包装成一个单独的,因为它似乎比不断打开和关闭数据库连接更好的想法,实现如下:

public class DB
{
    private static DB sInstance = null;
    private Database mDatabase = null;

    public static DB Instance
    { 
        get
        {
            if (sInstance == null)
            {
                sInstance = new DB();
            }
            return sInstance;
        }
    }

    private DB()
    {
        mDatabase = Database.Open("<Connection String name from web.config>");

        return;
    }

    <Query Functions Go Here>
}

(&#34;数据库&#34;这里指的是WebMatrix.Data.Database类)

第一次加载带有表单的页面并提交时,mDatabase的Database.Connection属性显示如下:(抱歉,还没有足够的代表发布图片。)

http://i.stack.imgur.com/jJ1RK.png

表单提交,页面重新加载,提交的数据显示,一切都很好。然后我输入新数据并再次提交表格,这就是手表:

http://i.stack.imgur.com/Zorv0.png

尽管没有在我的代码中的任何地方调用Database.Close(),但Connection已关闭并且其连接字符串已空白。我完全不知道造成这种情况的原因,以前有人见过吗?

我目前正在通过之前调用Database.Open()和在每次查询之后立即调用Database.Close()来解决此问题,这似乎效率低下。

1 个答案:

答案 0 :(得分:0)

Web页面框架将确保在当前页面执行完毕后关闭并处理通过数据库帮助程序类打开的连接。这是设计的。这也是您在使用数据库帮助程序的任何Web页面教程中很少看到显式关闭的原因的原因。

在ASP.NET应用程序中永久打开连接是一个很好的主意。它可能导致内存泄漏。调用Close时,默认情况下实际上不会终止连接。它将返回到由ADO.NET连接池保持活动状态的连接池。这样,实例化新连接所需的工作量最小化,但管理得当。所以你需要做的就是在每个页面中调用Database.Open。这是推荐的方法。