【问题标题】:Jet 4.0 connection problem with c# windows applicationJet 4.0 与 c# windows 应用程序的连接问题
【发布时间】:2011-03-25 05:24:38
【问题描述】:

我正在开发一个在服务器机器上连续运行的 win .net 应用程序。应用程序将使用 Jet 4.0 OLEDB 提供程序与驻留在多个客户端计算机中的 access(mdb) 数据库连接。

每个连接的数据库都已被本地安装的其他应用程序使用。

当客户端机器一直处于活动状态时,我的应用程序成功地与所有数据库通信。

但是,如果我的一台客户端机器出现故障(例如系统或网络)并重新启动,应用程序将无法重新连接到该特定数据库,尽管它可以通过网络访问。

即使我尝试以编程方式重新启动我的应用程序以重新建立连接。但是,它也失败了。

应用程序只是抛出

“磁盘或网络错误”

“未指定的错误”

“无法启动您的应用程序。工作组信息文件丢失或被其他用户独占打开。”

有人吗?

【问题讨论】:

  • 一些代码可能会有所帮助。您是否尝试在连接重新联机后重新打开连接?
  • Jet/ACE 连接丢失后无法恢复。也就是说,如果远程机器重新启动,您需要从头开始重新初始化连接。永远不会恢复。
  • 大卫的评论很完美。 Jet 从失败的连接中恢复的能力很糟糕。单个数据包的丢失将断开您的连接。我们建议所有用户只使用实际服务器上的共享数据库(绝不是用户的工作站),并且永远不要通过 VPN 连接。

标签: c# ms-access oledb database-connection


【解决方案1】:

是的。

实际上,我对与应用程序关联的每个数据库都使用了带有以下代码的静态对象。

DbProviderFactory factory;
DbConnection connection;
DbDataAdapter dataAdapter;

void SetConnection(ConnectionStringSettings settings) {
    factory = DbProviderFactories.GetFactory(settings.ProviderName);
    if (factory != null) {
        if (connection == null) {
            connection = factory.CreateConnection();
            dataAdapter = factory.CreateDataAdapter();                    
            connection.ConnectionString = settings.ConnectionString;
        }
    }
}

public DataTable GetTable(string statement) {
    DataTable dataTable = null;
    if (connection != null) {
       dataAdapter.SelectCommand = connection.CreateCommand();
       dataAdapter.SelectCommand.CommandText = statement;
       dataTable = new DataTable();
       dataAdapter.Fill(dataTable);
    }
    else
       throw new Exception("Connection object null");

    return dataTable;
}

我正在从 app.config 设置连接字符串和提供程序名称。

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多