C# 如何在ssis中加载多张excel(2016)文件
这段代码在我的机器上运行得很好(我有excel 2010),但当我的主管尝试运行但在他的机器上不工作时(他有excel 2016),那么对于excel 2016,我需要更改连接吗 ConStr=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+fileFullPath+”;扩展属性=\”Excel 12.0;HDR=“+HDR+”;IMEX=0\“”C# 如何在ssis中加载多张excel(2016)文件,c#,excel,ssis,C#,Excel,Ssis,这段代码在我的机器上运行得很好(我有excel 2010),但当我的主管尝试运行但在他的机器上不工作时(他有excel 2016),那么对于excel 2016,我需要更改连接吗 ConStr=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+fileFullPath+”;扩展属性=\”Excel 12.0;HDR=“+HDR+”;IMEX=0\“” 他是否收到错误消息说ACE提供商未注册?如果是这样,您的主管需要下载并在其机器上安装: 是的,我已经在他的机器上下
他是否收到错误消息说ACE提供商未注册?如果是这样,您的主管需要下载并在其机器上安装:
是的,我已经在他的机器上下载了Microsoft Access数据库引擎2010可再发行版,但仍然出现相同的错误。ace.oledb.12是否仍然适用于excel 2016?@Long您可以粘贴完整的错误消息吗?如果它说ACE.OLEDB.12.0,那么是的,我没有安装2016,但是如果它说,您需要下载并安装正确的版本(32位或64位),那么rebootgetting异常已被调用的目标抛出。但是当我检查他的机器时,他没有ace.oledb.12.0,然后我安装了,但仍然得到相同的错误@LONG这是一般性的消息,因为你已经调试过了,应该是安装问题,你安装了正确的并重新启动了你的机器吗?是的,我会重新安装,我会让你知道的。@LONG
string FolderPath = Dts.Variables["User::FolderPath"].Value.ToString();
string TableName = Dts.Variables["User::TableName"].Value.ToString();
string SchemaName = Dts.Variables["User::SchemaName"].Value.ToString();
string SheetNameToLoad = Dts.Variables["User::SheetNameLike"].Value.ToString();
var directory = new DirectoryInfo(FolderPath);
FileInfo[] files = directory.GetFiles();
//Declare and initilize variables
string fileFullPath = "";
SqlConnection myADONETConnection = new SqlConnection();
myADONETConnection = (SqlConnection)(Dts.Connections["DBconnection"].AcquireConnection(Dts.Transaction) as SqlConnection);
////Get one Book(Excel file at a time)
foreach (FileInfo file in files)
{
fileFullPath = FolderPath + "\\" + file.Name;
MessageBox.Show(fileFullPath);
// //Create Excel Connection
string ConStr;
string HDR;
HDR = "YES";
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
OleDbConnection cnn = new OleDbConnection(ConStr);
// //Get Sheet Name
cnn.Open();
DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetname;
sheetname = "";
//Only read data from provided SheetNumber
foreach (DataRow drSheet in dtSheet.Rows)
{
sheetname = drSheet["TABLE_NAME"].ToString();
MessageBox.Show(sheetname);
//Load the Data if Sheet Name contains value of SheetNameLike
if (sheetname.Contains(SheetNameToLoad) == true)
{
//Load the DataTable with Sheet Data so we can get the column header
OleDbCommand oconn = new OleDbCommand("select * from [" + sheetname + "] where CityName ='ARLINGTON'", cnn);
OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
DataTable dt = new DataTable();
adp.Fill(dt);
cnn.Close();
//Load Data from DataTable to SQL Server Table.
using (SqlBulkCopy BC = new SqlBulkCopy(myADONETConnection))
{
BC.DestinationTableName = SchemaName + "." + TableName;
BC.WriteToServer(dt);
}
}
}