Проблема подключения Jet 4.0 с приложением c # windows

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

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

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

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

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

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

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

or

«Неизвестная ошибка»

or

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

Кто-нибудь?


person Venkatesh    schedule 04.08.2010    source источник
comment
Некоторый код может помочь. Вы пытаетесь повторно открыть соединение после того, как оно вернется в режим онлайн?   -  person Greg Bogumil    schedule 04.08.2010
comment
Jet / ACE не может восстановить соединение после его потери. То есть, если удаленная машина перезагружается, вам необходимо заново инициализировать соединение с нуля. Нет никакого выздоровления, никогда.   -  person David-W-Fenton    schedule 04.08.2010
comment
Комментарий Дэвида был идеальным. Jet ужасен с точки зрения его способности восстанавливаться после сбоя соединения. Потеря одного пакета нарушит ваше соединение. Мы рекомендуем всем нашим пользователям использовать общую базу данных только на реальном сервере (никогда на рабочей станции пользователя) и НИКОГДА не через VPN-соединение.   -  person Lynn Crumbling    schedule 23.03.2011


Ответы (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.

person Venkatesh    schedule 04.08.2010