1

プログラムの実行中に、次のエラーがランダムにポップアップし続けます。これはかなり新しいので、これをキャッチする方法がわかりません...簡単な検索を行いましたが、何も役に立たないようです。

以下は私のコードの一部です:

protected DBBase(string tableName, string primary_key)
{
    string s = Application.StartupPath + "\\alliancedb.accdb";
    conn = new OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}", s));
    if (conn.State == ConnectionState.Closed)
    {
        conn.Open();
        dataset = new DataSet();
        //query statement
        string sqlStatement = String.Format("Select * from {0} order by {1} ASC", tableName, primary_key);
        //run sql
        DBadpt = new OleDbDataAdapter(sqlStatement, conn);
        oOrderDetailsCmdBuilder = new OleDbCommandBuilder(DBadpt);
        DBadpt.Fill(dataset);
        dbTab = dataset.Tables[0];
        dbTab.TableName = this.tableName = tableName;

        rows = dbTab.Rows;
    }
    else if (conn.State == ConnectionState.Open)
    {
        conn.Close();
        conn.Open();
        dataset = new DataSet();
        //query statement
        string sqlStatement = String.Format("Select * from {0} order by {1} ASC", tableName, primary_key);
        //run sql
        DBadpt = new OleDbDataAdapter(sqlStatement, conn);
        oOrderDetailsCmdBuilder = new OleDbCommandBuilder(DBadpt);
        DBadpt.Fill(dataset);
        dbTab = dataset.Tables[0];
        dbTab.TableName = this.tableName = tableName;

        rows = dbTab.Rows;
    }
}
4

1 に答える 1

1

接続を開いたままにしないでください。常にそれらを開いてデータを取得し、すぐに閉じてください。ブロックは通常、usingオブジェクトを閉じる最もクリーンなメソッドです。

また、テーブルまたはフィールドのいずれかがキーワードであるか、スペースが含まれている場合は、それらを [括弧] で囲む必要があります。

using (OleDbConnection conn = new OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}", s))) {
  conn.Open();
  string sqlStatement = String.Format("Select * from [{0}] order by [{1}] ASC", tableName, primary_key);
  // etc..
}
于 2013-09-15T12:21:06.120 に答える