在实时网站上覆盖访问数据库的可靠方法

时间:2011-07-11 09:40:42

标签: ms-access file-upload web

因此,我的客户说他们想要在一个单独的访问文件中管理他们网站上的一些信息,并不时上传。这似乎是一个合理的要求,所以为了安全起见,我实现了一个备份当前文件的上传器。

出现问题的原因是他们在运营商的连接速度慢,上传超时,或有人在覆盖文件时访问网站,或者星星是这样的,并且网站的任何部分都是从ms-access文件将被重置,直到重新复制web.config文件,导致网站重置。

是否有一个永远不会被覆盖的文件,并且以下“冗余”/“故障转移”接近史诗般的失败,或者我几乎 - 但不是很得到了在这里工作的解决方案(显然他们仍然在上述特殊情况下得到错误,再次被当地测试人员不可挽回)

private static OleDbConnection conn;
public static OleDbConnection GetAccessConnection()
{
    if(conn == null)
    {
        string connstring;
        try
        {
            connstring = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
            conn = new OleDbConnection(connstring);
            ExecuteNonQuery("SELECT TOP 1 * FROM MyTable");
            return conn;
        }
        catch
        {
            connstring = ConfigurationManager.ConnectionStrings["AccessConnectionString1"].ConnectionString;
            conn = new OleDbConnection(connstring);
            ExecuteNonQuery("SELECT TOP 1 * FROM ServiceProviders");
            return conn;
        }
    }

    return conn;
}

<connectionStrings>
    <add name="AccessConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={My File Path};Persist Security Info=False;"/>
    <add name="AccessConnectionString1" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={My Backup File Path};Persist Security Info=False;"/>
</connectionStrings>

1 个答案:

答案 0 :(得分:1)

如果坚持使用Access数据库,那么您可以尝试这一点,这将大大加快替换过程,从而最大限度地减少停机时间,损坏或锁定问题。

创建一个新的Access DB文件(A),并在其中创建原始数据库(B)中所有表的表[links]。因此,现在您的Web应用程序将引用新数据库,该数据库似乎具有与以前相同的所有表,除了它们将是指向您的真实数据库(B)的表链接。

当需要进行数据库切换时,只需将新数据库(C)复制到服务器即可。然后打开数据库(A)并重新链接表以指向数据库(C)。重新链接过程只需几秒钟,不会导致数据移动,您的网络应用程序也不会知道任何更改。

我并不是说这是一个很好的做法,但它可以在短期内帮助你,直到你能够接受迁移到SQL Express或类似的东西的想法。

只是一个想法; - )