我使用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数据库
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。