2010-08-04 92 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設置連接字符串和提供程序名稱。

相關問題