Во-первых, это периодическая проблема, которая внезапно возникала ежедневно для других пользователей, получающих доступ со своих компьютеров. Выбор 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, возвращающий пустые строки в таблицу данных
catch(OleDbException ex)
всякий раз, когда используется блок try-catch. Вы можете посмотреть некоторые настройки базы данных (при использовании Access 2016: Файл => Параметры => Настройки клиента => Дополнительно) - person user9938   schedule 25.06.2021