C# 如何在ssis中加载多张excel(2016)文件

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提供商未注册?如果是这样,您的主管需要下载并在其机器上安装: 是的,我已经在他的机器上下

这段代码在我的机器上运行得很好(我有excel 2010),但当我的主管尝试运行但在他的机器上不工作时(他有excel 2016),那么对于excel 2016,我需要更改连接吗 ConStr=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+fileFullPath+”;扩展属性=\”Excel 12.0;HDR=“+HDR+”;IMEX=0\“”


他是否收到错误消息说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);
                    }

                }
            }