5

Oledbを使用してAccessFile(.accdb)をDataSetに読み取りますが、テーブル名や列についてはわかりません。通常の実装は次のとおりです。

public void GetAccessDB(string filepath){

this.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " + filepath;
// get Table Names
this.TableNames = new List<string>();
using (System.Data.OleDb.OleDbConnection oledbConnection = new System.Data.OleDb.OleDbConnection(this.ConnectionString))
{
oledbConnection.Open();
System.Data.DataTable dt = null;
dt = oledbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
foreach (System.Data.DataRow row in dt.Rows)
{
  string strSheetTableName = row["TABLE_NAME"].ToString();
  if (row["TABLE_TYPE"].ToString() == "TABLE")
     this.TableNames.Add(strSheetTableName);
}
oledbConnection.Close();
}


this.Dataset = new System.Data.DataSet();
using (System.Data.OleDb.OleDbConnection oledbConnection = new System.Data.OleDb.OleDbConnection(this.ConnectionString))
{
  foreach (string table in this.TableNames)
  {
    string command = string.Format("SELECT * FROM {0};", table);
    using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(command, oledbConnection))
    {
      cmd.CommandType = System.Data.CommandType.Text;
      oledbConnection.Open();
      System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader();
      this.Dataset.Load(dr, System.Data.LoadOption.OverwriteChanges, table);
      oledbConnection.Close();
    }
  }
}
}

しかし、ストリームからアクセスファイルを取得する必要があり、一時的にディスクに書き込むことができないので、あなたの提案は何ですか?

私はこの過負荷が必要GetAccessDB(Stream AccessFile)ですか?これを検索して見つけましたが、それは私にはわかりません。最終的に、アクセスファイル内のすべてのテーブルでDataSetを取得する必要があります。

誰かがこれについて知っていますか?

4

2 に答える 2

2

インメモリ データベースを操作するための OleDb の API 関数がわかりません。たぶん、RAMDisk をインストールできますか?

于 2013-01-23T09:05:53.657 に答える
1

を制御できる場合MS SQL Server、それは朗報です。現在、2 つの選択肢があります。

  1. アップロードされたファイル テーブルに挿入が行われると、ファイルを処理する (非同期が良い考えです) CLR アセンブリを作成します。アップロードされたファイルのコンテンツを使用して、サーバー上に一時MS Accessファイルを作成します。次に、それを で開きOleDB、解析して、そこからの情報を SQL テーブルに挿入します。SQL テーブルは、抽出された情報を最初のテーブルのアップロードされたファイル レコードにマップします。次に、この 2 番目のテーブルでデータを探します。

  2. もう 1 つのオプションは、以下を実行するコマンドを SQL に送信することです。

    1. アップロードされたファイル バイトを使用して、ファイル システムにファイルを作成します
    2. 次に、ファイルをリンクサーバーとして使用します
    3. SELECTAccess データベースのクエリに使用します

どちらのオプションでも、SQL Server に (少なくとも一時的な) ファイルを作成する必要があることに気付いたかもしれません。

于 2013-01-23T11:23:30.683 に答える