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

Ms access 在实时网站上覆盖access数据库的可靠方法,ms-access,file-upload,web,Ms Access,File Upload,Web,因此,我的客户说,他们希望在一个单独的访问文件中管理网站上的一些信息,并不时上传这些信息。这似乎是一个合理的要求,所以为了安全起见,我实现了一个备份当前文件的上传程序 出现的问题是,他们的连接速度很慢,上传超时,或者有人在文件被覆盖时访问网站,或者星星对齐,从ms access文件获取数据的网站的任何部分都会崩溃,直到重新复制web.config文件为止,导致网站重置 有一个永远不会被覆盖的文件,下面的“冗余”/“故障切换”方法失败了,或者我几乎没有找到一个有效的解决方案(显然,在上述特殊情况下

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

出现的问题是,他们的连接速度很慢,上传超时,或者有人在文件被覆盖时访问网站,或者星星对齐,从ms access文件获取数据的网站的任何部分都会崩溃,直到重新复制web.config文件为止,导致网站重置

有一个永远不会被覆盖的文件,下面的“冗余”/“故障切换”方法失败了,或者我几乎没有找到一个有效的解决方案(显然,在上述特殊情况下,他们仍然会出错,本地测试人员也无法恢复)


如果坚持使用Access DB,那么您可以尝试以下一种方法,它可以极大地加快更换过程,从而最大限度地减少停机时间、损坏或锁定问题

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

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

我并不是说这是一个好的实践,但它可能在短期内对您有所帮助,直到您能够接受迁移到SQL Express或类似的想法


只是一个想法;-)

如果没有客户的要求,请尝试更改为sql server或其他数据库(mySQL、Oracle等)Access/Jet/ACE不是网站的合适数据存储。这是一个很好的数据库引擎,但它不是为那种环境设计的,使用为这种情况设计的数据库会更好。@mnieto。。问题的开头几句话。。“所以,我的客户说他们想要”。。当然这是客户的要求。是不是现在每个人都太忙了以至于看不到这个血腥的问题?@David-W-Fenton,然而,它是网站上最常用的数据库引擎之一。幸运的是,这个网站不是由微软运营的,否则,你可能会在后台看到一个(哦,你的评论会被标记)。顺便说一句它仍然没有回答这个问题。许多网站提供它只是表明这些网站是由不了解他们正在销售的技术的人经营的。鲟鱼法则。它确实回答了这个问题--更改您的数据库,因为如果您不这样做,就没有可靠的方法来避免这个问题。
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>