c# – 使用OLEDB从Stream读取AccessFile到DataSet

我使用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();
    }
  }
}
}

但是我需要从Stream获取Access文件,而且我暂时不能将它写在磁盘上,那你的建议是什么?

我需要GetAccessDB的这个重载(Stream AccessFile)?
搜索并找到This,但这对我来说并不清楚,我最终需要通过Access File中的所有表获取DataSet.

有人知道吗?

解决方法

如果您可以控制MS sql Server,这是个好消息.我目前看到两种选择:

>创建一个CLR asssembly,一旦在上传文件表中插入,将处理(异步是一个好主意)文件.它将使用上载文件内容在服务器上创建临时MS Access文件.然后,使用OleDB打开它,解析它并将其中的信息插入到sql表中,该表将提取的信息与第一个表中的上载文件记录进行映射.然后,您可以在第二个表中查找数据.
>另一种选择是向sql发送一个命令,该命令将执行以下操作:

>使用上传文件字节到create a file on the filesystem.
>然后,将文件用作linked server
>使用SELECT查询Access数据库

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...