2010-08-04 2 views
0

서버 컴퓨터에서 계속 실행되는 .net 응용 프로그램을 개발 중입니다. 응용 프로그램은 Jet 4.0 OLEDB 공급자를 사용하는 여러 클라이언트 컴퓨터에있는 액세스 (mdb) 데이터베이스와 연결됩니다.C# Windows 응용 프로그램과의 Jet 4.0 연결 문제

연결된 각 데이터베이스는 로컬로 설치된 다른 응용 프로그램에서 이미 사용 중입니다.

클라이언트 시스템이 지속적으로 살아있을 때 내 앱이 모든 데이터베이스와 성공적으로 통신합니다.

하지만 내 클라이언트 컴퓨터 중 하나가 다운되면 (시스템 또는 네트워크) 재부팅하면 네트워크를 통해 액세스 할 수 있지만 응용 프로그램은 해당 특정 데이터베이스에 다시 연결할 수 없습니다.

심지어 응용 프로그램을 프로그래밍 방식으로 다시 시작하여 연결을 다시 설정하려고했습니다. 그러나 또한 실패합니다.

응용 프로그램은

"디스크 또는 네트워크 오류"가 발생

또는

"지정되지 않은 오류"

또는

"응용 프로그램을 시작할 수 없습니다. 작업 루트 정보 파일이 없거나 다른 사용자가 독점적으로 열었습니다. "

누구나?

+0

몇 가지 코드가 도움이 될 수 있습니다. 온라인으로 다시 연결되면 연결을 다시 열려고합니까? –

+1

Jet/ACE는 일단 연결이 해제되면 복구 할 수 없습니다. 즉, 원격 컴퓨터가 재부팅되면 연결을 처음부터 다시 초기화해야합니다. 이제까지 회복이 없습니다. –

+0

David의 의견은 완벽했습니다. Jet는 실패한 연결로부터 복구 할 수있는 능력과 관련하여 끔찍합니다. 단일 패킷이 손실되면 연결이 끊어집니다. 모든 사용자는 실제 서버 (사용자 워크 스테이션이 아님)에서 공유 데이터베이스 만 사용하고 VPN 연결을 통해 절대 공유 데이터베이스를 사용하지 않는 것이 좋습니다. –

답변

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에서 연결 문자열과 제공자 이름을 설정하고 있습니다.