0

このエラーを解決するのに助けが必要です。

これがエラーです{"The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception."}


私はAccessデータベースを使用しており、ビルド構成のプラットフォームは任意のCPUです。

コードが正常に実行される場合もあれば、突然この例外がスローされる場合もあります。ここで同様の質問がたくさんありますが、どれも私のエラーを解決していません。

これは私の接続文字列です

DbPath = @"d:\Ek.mdb";
ConnectionString =@"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、その後このエラーがスローされます。
また、デバッグ中にエラーは発生しません。その場所に a を置かない場合にのみ発生しbreakpointます。
ブレークポイントを置いて、Con.Open()そこで初めて数秒間停止すると、エラーはスローされません。その後、ブレークポイントを無効にしてもエラーがスローされない場合...!!!

4

7 に答える 7

2

データベースを sqlite に変更し、すべてが非常にスムーズに機能しています...
Access データベースでは、トランザクションに問題があると思います。
データベースを変更することで解決しました。それでも、何がその奇妙なエラーを引き起こしたのかわかりません。

于 2013-07-07T09:50:52.877 に答える
1

App.Config ファイルに何か問題がありました。

それを削除して、新しいプロジェクトから新しいプロジェクトを追加したところ、修正されました。

于 2013-08-22T19:08:32.407 に答える
0

以下の 2 つの方法を使用して、Access db 接続を開いたり閉じたりして、x86 モードでプログラムをビルドし、問題が発生するかどうかを確認してください。

OleDbConnection _oleCon;
        public Form1()
        {
            InitializeComponent();
            _oleCon = new OleDbConnection();
        }

        bool OpenConnection()
        {
            try
            {
                string DbPath = @"D:\Ek.mdb";
                _oleCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + DbPath + ";";//ConfigurationSettings.AppSettings["dbConnectionString"];
                _oleCon.Open();
                return true;
            }
            catch
            {
                return false;
            }
        }

        bool CloseConnection()
        {
            try
            {
                _oleCon.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
于 2013-07-07T10:36:36.833 に答える
0

app.configから空のスペースを削除してください.....私にとってはうまくいきます...

于 2013-10-03T08:09:59.750 に答える
0

ローカル SQLite データベースに接続する際の問題を解決するように見える NuGet パッケージを更新しました。

于 2015-05-17T17:47:04.713 に答える