Проблема соединения Jet 4.0 с приложением c # windows - PullRequest
0 голосов
/ 04 августа 2010

Я занимаюсь разработкой приложения win .net, которое постоянно работает на сервере. Приложение будет связано с базами данных доступа (mdb), которые находятся на нескольких клиентских компьютерах с использованием поставщика OLEDB Jet 4.0.

Каждая подключенная база данных уже использовалась другим локально установленным приложением.

Мое приложение успешно обменивается данными со всеми базами данных, когда клиентские машины постоянно работают.

Но если один из моих клиентских компьютеров выходит из строя (скажем, система или сеть) и перезагружается, приложение не может повторно подключиться к этой конкретной базе данных, хотя она доступна через сеть.

Даже я пытался перезапустить приложение программно, чтобы восстановить соединение. Но, это также терпит неудачу.

Приложение просто выбрасывает

«Ошибка диска или сети»

или

«Неуказанная ошибка»

или

"Невозможно запустить приложение. Файл информации рабочей группы отсутствует или открыт исключительно другим пользователем."

Любой

1 Ответ

0 голосов
/ 04 августа 2010

Да.

На самом деле я использую статический объект со следующим фрагментом кода для каждой базы данных, связанной с приложением.

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.

...