2010-08-04 54 views
0

我正在开发一个win .net应用程序,它在服务器机器上连续运行。应用程序将与使用Jet 4.0 OLEDB提供程序驻留在多个客户机中的访问(mdb)数据库连接。Jet 4.0与c#windows应用程序的连接问题

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

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

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

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

应用只是抛出

“磁盘或网络错误”

“未指定错误”

“无法启动应用程序。工作群组信息文件丢失或由另一个用户专门打开。“

有人吗?

+0

某些代码可能会有所帮助。您是否尝试在网络恢复后重新打开连接? – 2010-08-04 12:04:15

+1

Jet/ACE一旦丢失就无法恢复连接。也就是说,如果远程计算机重新启动,则需要重新初始化您的连接。没有恢复,永远。 – 2010-08-04 18:25:06

+0

大卫的评论是完美的。 Jet对于从失败连接恢复的能力来说是非常可怕的。丢失一个数据包会导致连接中断。我们向所有用户推荐他们仅在实际服务器上使用共享数据库(从来不是用户的工作站),并且永远不会通过VPN连接。 – 2011-03-23 17:12:37

回答

0

是的。

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

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设置连接字符串和提供程序名称。

相关问题