Мне нужна помощь в решении этой ошибки.
Это ошибка {"The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception."}
Инициализатор типа для «System.Transactions.Diagnostics.DiagnosticTrace» сделал исключение
Я использую базу данных Access и платформы для конфигурации сборки является любой CPU.
Иногда код работает хорошо, и иногда он неожиданно выбрасывает это исключение. Здесь есть много подобных вопросов, но ни одна из них не решает мою ошибку.
Это моя строка соединения
DbPath = @"d:\Ek.mdb";
ConnectionString [email protected]"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DbPath+";User Id=admin;Password=;";
Это моя функция, чтобы открыть соединение
Я получаю ошибку на Con.Open()
public bool OpenConnection()
{
if (Con == null)
{
Con = new OleDbConnection(ConnectionString);
}
else if ((Con.State == ConnectionState.Broken || Con.State == ConnectionState.Closed) && (Con.State!=ConnectionState.Open))
{
Con.Open();
Tx = Con.BeginTransaction(IsolationLevel.ReadCommitted);
return true;
}
else if (IsConnectionBusy())
{
throw new DataException("Connection Busy");
}
return false;
}
это, как я закрываю соединение после выполнения запросы
public Boolean CloseConnection()
{
if(IsConnectionBusy())
throw new DataException("Connection Busy");
if (Con.State==ConnectionState.Open)
{
Tx.Commit();
Con.Close();
return true;
}
return false;
}
public bool IsConnectionBusy()
{
switch (Con.State)
{
case ConnectionState.Connecting:
case ConnectionState.Executing:
case ConnectionState.Fetching:
return true;
}
return false;
}
Я не могу найти, почему он работает иногда отлично, а затем иногда выбрасывает это исключение.
Любая помощь будет принята с благодарностью. Я слишком много пытался решить эту ошибку, но не смог.
То, что я заметил, находится на этой линии.
else if ((Con.State == ConnectionState.Broken || Con.State == ConnectionState.Closed) && (Con.State!=ConnectionState.Open))
Соединение в closed state
. Когда он выполняет оператор Con.Open()
, состояние Connection
изменяется на Open
, после чего эта ошибка возникает.
Также при отладке ошибка не вызвана. Это происходит только тогда, когда я не ставил breakpoint
в этом месте.
В Con.Open()
, когда я поставил точку останова и остановился на несколько секунд только в первый раз, тогда нет ошибки. После этого, если я отключу точку останова, и ошибка не будет ... !!!
какой офис MS/версия доступа вы используете? – Rezoan
Я использую 2007, и я создал базу данных для совместимости с 2000-2003 гг. – coding
Также я не получаю ошибку, если поставил точку останова. Это происходит только тогда, когда нет точки останова, и эта ошибка не всегда возникает. – coding