0

我有 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

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机中注册

虽然我将在下面包含我的代码,但我认为在我拥有驱动程序之前它不会有所作为 -

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);
            } 
        }
    }
}
4

2 回答 2

1

您的连接字符串不正确。

提供者应该是Microsoft.ACE.OLEDB.12.0

我相信 JET 提供程序是 4.0。你是事先尝试过的吗?

于 2012-08-15T15:17:14.957 回答
0

我做了几件事,所以我不确定所有步骤是否都很重要。

我根据这篇 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)后,我修复了它。

于 2012-08-15T16:15:54.563 回答