0

我创建了一个演示,用于将 Excel 文件上传到 webserver,然后将数据从它复制到 SQL server db。它运行良好。

ASPX 设计:

    <table>
           <tr>
              <td>
                   <span style="color: Red">*</span>Attach Excel file
              </td>
              <td>
                   <asp:FileUpload ID="fileuploadExcel" runat="server" />
              </td>
           </tr>
           <tr>
              <td></td>
              <td>
                  <asp:Button ID="btnSend" runat="server" Text="Export" onclick="btnSend_Click"  />
              </td>
</tr>
</table>

后面的代码:

 private String strConnection = "Data Source=Test-PC;Initial Catalog=ExcelMapping;User ID=Test;Password=Test";
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void btnSend_Click(object sender, EventArgs e)
        {
            //file upload path
            string path = fileuploadExcel.PostedFile.FileName;
            fileuploadExcel.SaveAs(Server.MapPath(path));
            //Create connection string to Excel work book
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(path) + ";Extended Properties=Excel 12.0;Persist Security Info=False";
            //Create Connection to Excel work book
            OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
            //Create OleDbCommand to fetch data from Excel
            OleDbCommand cmd = new OleDbCommand("Select [lat],[long] from [Sheet1$]", excelConnection);
            excelConnection.Open();
            OleDbDataReader dReader;
            dReader = cmd.ExecuteReader();
            DataSet ds = new DataSet();

            SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
            //Give your Destination table name
            sqlBulk.DestinationTableName = "Test";
            sqlBulk.ColumnMappings.Add(0, 1);
            sqlBulk.ColumnMappings.Add(1, 2);
            sqlBulk.WriteToServer(dReader);
            excelConnection.Close();
        }
    }

但是当我在现有应用程序中使用相同的代码时。打开与 Excel 的连接时出现错误

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

请建议我如何解决这个问题。

4

5 回答 5

1

您需要安装Office System 驱动程序:数据连接组件

这是一个 32 位组件。所以你需要将你的平台设置为 x86。

于 2013-07-09T07:17:58.673 回答
1

我曾经遇到过这个问题。我按照以下步骤操作:

只需按照以下步骤操作:

  1. 在解决方案资源管理器中右键单击解决方案文件

  2. 单击配置管理器。

  3. 单击 Active Platform 下拉菜单,如果 x86 已经存在,则选择它,否则单击 New。

  4. x86从新平台下拉列表中选择

  5. 编译并运行您的应用程序。

您可以按照链接逐步进行图示。

于 2013-07-09T07:16:31.353 回答
1

当您的应用程序的位数与安装的 ACE.OLEDB 提供程序不同并且通常出现在 64 位系统上时,会出现此消息

例如,您针对AnyCPU平台进行编译,然后在 64 位系统上运行您的应用程序。在这种情况下,您的应用程序作为 64 位代码运行,但 64 位代码不能使用 32 位驱动程序。如果在您的目标系统上有一个 32 位 ACE.OLEDB,您会收到消息。当然,反过来也是如此。您的应用是 x86 编译的,但 ACE.OleDb 是 64 位的。(不,您不能同时安装 32 位和 64 位版本的提供程序)

当然,我假设驱动程序已经安装,如果没有,您可以从Microsoft Access 数据库引擎页面下载它们,但请记住,它们应该与您安装的 Microsoft Office 具有相同的位数。大问题来了。如果您安装了 32 位版本的 Office,则需要 32 位版本的数据库引擎。这意味着您需要为 x86 编译应用程序,或者您需要安装 64 位版本的 Microsoft Office。

于 2013-07-09T07:17:00.087 回答
0

错误是因为您没有在机器上安装 Office 2007。

因此,您需要从以下位置安装 2007 Office System 驱动程序:数据连接组件: http ://www.microsoft.com/download/en/details.aspx?id=23734

于 2013-07-09T07:17:31.460 回答
0

尝试这个

没有OLEDB ..非常简单的代码

参考:exceldatareader.codeplex.com/

下载dll并添加引用

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
//...
//2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//...
//3. DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();
//...
//4. DataSet - Create column names from first row
excelReader.IsFirstRowAsColumnNames = true;
DataSet result = excelReader.AsDataSet();

//5. Data Reader methods
while (excelReader.Read())
{
    //excelReader.GetInt32(0);
}

//6. Free resources (IExcelDataReader is IDisposable)
excelReader.Close();
于 2013-07-09T08:35:14.587 回答