我创建了一个演示程序,用于将Excel文件上传到网络服务器,然后将数据从中复制到SQL服务器数据库。它工作得很好。
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”提供程序未在本地计算机上注册
请建议我该怎么做才能解决这个问题。
答案 0 :(得分:1)
我曾经遇到过这个问题。我按照以下步骤操作:
只需按照以下步骤操作:
右键单击解决方案资源管理器中的解决方案文件
单击配置管理器。
单击Active Platform下拉列表,如果x86已经存在,则选择该项,否则单击New。
从新平台下拉列表中选择x86
编译并运行您的应用程序。
您可以按照THIS链接逐步进行图示。
答案 1 :(得分:1)
当您的应用程序的位数与安装的ACE.OLEDB提供程序不同时,会出现此消息,并且通常发生在64位系统上
例如,您为AnyCPU
平台编译,然后在64位系统上运行您的应用程序。在这种情况下,您的应用程序以64位代码运行,但64位代码不能使用32位驱动程序。如果在目标系统上有一个32位ACE.OLEDB,则会收到消息。当然,反过来也是如此。您的应用程序是x86编译但ACE.OleDb是64位。 (不,你不能同时安装32位和64位版本的提供商)
当然我假设已经安装了驱动程序,如果没有,您可以从Microsoft Access Database Engine页面下载它们,但请记住它们应该与您安装的Microsoft Office具有相同的位数。这是一个大问题。如果您安装了32位版本的Office,则需要32位版本的数据库引擎。这意味着您需要为x86编译应用程序,或者需要安装64位版本的Microsoft Office。
答案 2 :(得分:1)
您需要安装Office System Driver: Data Connectivity Components。
这是一个32位组件。因此,您需要将平台设置为x86。
答案 3 :(得分:0)
出现错误是因为您没有在计算机上安装Office 2007。
因此,您需要从以下位置安装2007 Office System驱动程序:数据连接组件: http://www.microsoft.com/download/en/details.aspx?id=23734
答案 4 :(得分: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();