我目前正在尝试从存储在我的服务器计算机上的excel文件中检索数据。这是代码。
public void ImportDataFromExcel(string excelPath)
{
string connString ="server=D0123;uid=abc;pwd=abc@123;database=MYDB";
string SqlTable = "xx_fields";
string excelQuery = "Select FieldName,FieldType,Length,Decimal from [Sheet1$]";
try {
string excelConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+excelPath+";Extended Properties="+"\"Excel 12.0;HDR=Yes;IMEX=1\"";
OleDbConnection oleDbconn = new OleDbConnection(excelConnStr);
oleDbconn.Open();
OleDbCommand oleDbcmd = new OleDbCommand(excelQuery,oleDbconn);
OleDbDataReader dr = oleDbcmd.ExecuteReader();
SqlBulkCopy bulkCopy = new SqlBulkCopy(connString);
bulkCopy.DestinationTableName = SqlTable;
while(dr.Read()) {
bulkCopy.WriteToServer(dr);
}
oleDbconn.Close();
} catch(Exception e) {
Response.Write("<script>alert('Error : '" + e.Message + ");</script>");
}
}
但是,每次我尝试打开excel连接字符串时,我都会收到错误:“预期”。我尝试过改变:
string excelConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+excelPath+";Extended Properties="+"\"Excel 12.0;HDR=Yes;IMEX=1\"";
到
string excelConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+excelPath+";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1""";
我的Excel文件格式如下:
FieldName FieldType Length Decimal
Name String 10
Date Numeric 8 0
Address String 40
Age Numeric 2 0
Price Numeric 8 2
我仍然得到同样的错误。是什么赋予了?最后一点,这个C#代码在私有引擎上运行,因此不能使用MS Visual Studio或其他库,如MS Office Interop。
答案 0 :(得分:1)
连接字符串应为
string excelConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
excelPath + ";Extended Properties=" + "\"Excel 12.0;HDR=Yes;IMEX=1\"";
更新:
http://www.connectionstrings.com/ace-oledb-12-0/ 显示这个
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
您的excelPath
应该是服务器上的物理路径。您可以使用Server.MapPath()
来获取物理路径。但是,对于此函数,excelPath
是参数,因此,在调用此函数之前,您需要确保excelPath
。