Sae*_*eid 5 c# oledb ms-access stream c#-4.0
我使用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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我需要从Stream获取Access文件,而且我暂时不能将它写在磁盘上,那你的建议是什么?
我需要这个超载GetAccessDB(Stream AccessFile)吗?我搜索并找到了这个,但这对我来说并不清楚,我最终需要通过Access File中的所有表获取DataSet.
有人知道吗?
如果你能控制MS SQL Server,那是个好消息。我目前看到两种选择:
创建一个CLR 程序集,一旦在上传的文件表中进行插入,该程序集将处理(异步是一个好主意)文件。它将MS Access使用上传文件的内容在服务器上创建一个临时文件。然后,使用 打开它OleDB,解析它并将其中的信息插入到 SQL 表中,该表将提取的信息与第一个表中上传的文件记录进行映射。然后,您可以去查找第二个表中的数据。
另一种选择是向 SQL 发送一条命令,该命令将执行以下操作:
SELECT查询Access数据库您可能已经注意到,这两个选项都涉及在 SQL Server 上创建一个(至少是临时的)文件。
| 归档时间: |
|
| 查看次数: |
2791 次 |
| 最近记录: |