OleDbCommand спорадически не возвращает никаких ожидаемых строк, нет сообщения об ошибке

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

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

Некоторые примеры:

 public partial class MainForm : Form
 {
    public static OleDbConnection myOleDbConnection = new OleDbConnection();
    OleDbCommand myOleDbCommand = new OleDbCommand();
    DataSet myDataSet = new DataSet();

Затем еще ниже:

 private void Form1_Load(object sender, EventArgs e)
 {
            myOleDbConnection.ConnectionString = 
                 ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

            myOleDbConnection.Open();
            myOleDbCommand.Connection = myOleDbConnection;

            myOleDbCommand.CommandText = commandText;
            myOleDbCommand.CommandType = CommandType.Text;
            myOleDbDataAdapter1.SelectCommand = myOleDbCommand;

        try
        {
            myOleDbDataAdapter1.Fill(myDataSet, "MyResults");

            // Log shows 0 rows, but subsequent runs show correct number
            Log("Number of rows returned: " + myDataSet.Tables["MyResults"].Rows.Count);
        }
        catch (Exception ex)
        {
            // it never gets here
            MessageBox.Show("An error occurred" + ex.Message,
                            "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            return;  
        }

Что здесь происходит? Есть ли шанс, что это вызовет проблемы в объединенных ресурсах и помешает правильной обработке соединений?

Функция Log() использует передовой опыт (отдельное соединение и всегда заключено в оператор using) и не имеет проблем с записью в базу данных постоянно.

Строка подключения не имеет специальных настроек:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\Server\MyMdb.mdb"

Я искал связанные вопросы и не нашел случаев, в которых проблемы возникают с перерывами:

Проблема с OleDbConnection, Excel и пулом соединений

Метод заполнения OleDataAdapter, возвращающий пустые строки в таблицу данных


person ltree    schedule 24.06.2021    source источник
comment
Я не думаю, что было предоставлено достаточно информации. Из строки подключения не похоже, что база данных зашифрована. Откуда запускается приложение? Где находится файл базы данных? Сколько пользователей подключается? Несколько копий вашего приложения подключаются к базе данных или ваше приложение выступает в качестве промежуточного программного обеспечения? Вы можете начать с добавления остальной части кода (в Form1_Load) в блок try-catch. Добавляйте catch(OleDbException ex) всякий раз, когда используется блок try-catch. Вы можете посмотреть некоторые настройки базы данных (при использовании Access 2016: Файл => Параметры => Настройки клиента => Дополнительно)   -  person user9938    schedule 25.06.2021