命令行应用程序中的 asp.net 4.0 到 excel 2010 不起作用 - 即使在驱动程序安装后也找不到驱动程序
Posted
技术标签:
【中文标题】命令行应用程序中的 asp.net 4.0 到 excel 2010 不起作用 - 即使在驱动程序安装后也找不到驱动程序【英文标题】:asp.net 4.0 to excel 2010 in command line app not working - drivers not found even after driver install 【发布时间】:2012-08-15 14:39:22 【问题描述】:我有 100 个 excel 文件。在每个文件中,我需要将其中的一行插入 SQL 服务器。我需要这个自动化,但最终不在乎它是应用程序中的 asp.net 还是 excel 宏。如果您有任何想法,请告诉我。
问题 我编写了 asp.net 4.0 命令行应用程序代码,然后出现错误:“Microsoft.Ace.OleDb.4.0”提供程序未在本地计算机上注册。
试过 在我安装 Microsoft Access Database Engine 2010 Redistributable (http://www.microsoft.com/en-us/download/details.aspx?id=13255) 后,我的盒子上没有更多的 odbc 驱动程序。和以前一样只是 SQL 驱动程序。
我的机器是 x64,但我安装了 x86 office,所以我安装了 Microsoft Access Database Engine 2010 Redistributable for x86。
我还检查了注册表,除了 SQL 服务器驱动程序之外,看不到任何驱动程序。
我读过几篇文章:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/eeaa2d7b-fbfa-401b-8efe-9170f04059b0
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered in the local machine
虽然我将在下面包含我的代码,但我认为在我拥有驱动程序之前它不会有所作为 -
public void ImportExcelFilesForPieChart()
List<DataTable> listDataTables = new List<DataTable>();
List<CompanyInfo> newlist = new List<CompanyInfo>();
string sheetName = "Output";
string[] fileList = Directory.GetFiles(dropBoxExcelLocation);
foreach (string filename in fileList)
DataTable dt = new DataTable();
string connectionString = string.Format("Provider=Microsoft.Ace.OleDb.4.0;data source=0;Extended Properties=Excel 8.0;HDR=No;IMEX=1", dropBoxExcelLocation + filename);
using (OleDbConnection connection = new OleDbConnection(connectionString))
string strSQL = String.Format("SELECT 4A, 4B, 4C, 4D, 4E, 4F FROM [0$]", sheetName); //[A4:F4]";
OleDbCommand objCmd = new OleDbCommand(strSQL, connection);
connection.Open();
using (OleDbDataAdapter da = new OleDbDataAdapter(strSQL, connection))
da.Fill(dt);
listDataTables.Add(dt);
【问题讨论】:
你的机器上的 IIS 是否在 x64 下运行? 我没有在 IIS 下运行,我正在作为控制台应用程序运行。 【参考方案1】:您的连接字符串不正确。
提供者应该是Microsoft.ACE.OLEDB.12.0
我相信 JET 提供程序是 4.0。你事先尝试过吗?
【讨论】:
我更改了连接字符串,现在我的错误是“找不到可安装的 ISAM”。我现在关注这个知识库 - support.microsoft.com/kb/209805.【参考方案2】:我做了几件事,所以我不确定是否所有步骤都很重要。
我根据这篇 kb 文章 http://support.microsoft.com/kb/209805 注册了我的 dll。在注册它们之前,我确认注册表中没有条目。这让我找到了 ISAM 未发现异常。
然后,感谢 Dave R,我更改了连接字符串。最终起作用的连接字符串是(注意扩展属性上的转义引号)
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;data source=0;Extended Properties=\"Excel 12.0 Xml;IMEX=1\"", filename);
我没有意识到文件扩展名(.xlsx)与连接字符串相关,但在阅读了此处的连接字符串信息(http://www.connectionstrings.com/excel-2007)后,我修复了它。
【讨论】:
很高兴你把它整理好了!连接字符串站点看起来也非常有用 - 我会收藏那个:) 感谢您的帮助。我被困住了。这对我帮助很大。以上是关于命令行应用程序中的 asp.net 4.0 到 excel 2010 不起作用 - 即使在驱动程序安装后也找不到驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
Directory.Exists 用于 ASP.NET 中的网络路径
如何使用 .Net 4.0 中包含的 HttpClient 类将文件上传到在 IIS Express 中运行的 Asp.Net MVC 4.0 操作
ASP.NET 4.0 中的 ViewStateMode - 向后兼容?