使用 OLEDB 将访问文件从流读取到数据集



我用 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)?我搜索并找到了这个,但这对我来说不清楚,我最终需要通过访问文件中的所有表获取数据集。

有人知道这件事吗?

我不知道

OleDb 中有任何 api 函数可用于处理内存数据库。也许,你能安装一个RAMDisk吗?

如果你能控制MS SQL Server,那是个好消息。我目前看到 2 种选择:

  1. 创建一个 CLR 组合,一旦在上载的文件表中插入,该组合将处理(异步是一个好主意)文件。它将使用上传文件的内容在服务器上创建一个临时MS Access文件。然后,用OleDB打开它,解析它并从中插入它的信息到一个SQL表中,该表将提取的信息与第一个表中上传的文件记录映射。然后,您可以去第二个表中查找数据。

  2. 另一种选择是向 SQL 发送一个命令,该命令将执行以下操作:

    1. 使用上传的文件字节在文件系统上创建文件。
    2. 然后,将该文件用作链接服务器
    3. 使用SELECT查询访问数据库

您可能已经注意到,这两个选项都涉及在 SQL Server 上创建(至少是临时的)文件。

相关内容

  • 没有找到相关文章

最新更新