Как исправить «необработанное исключение« System.Runtime.InteropServices.SEHException »в System.Data.dll» в C # - PullRequest
0 голосов
/ 22 апреля 2019

Я столкнулся с проблемой около bulk insert a XLSM (excel file) до моего SQL Database.Норма, могу bulk insert с excel file 2010 до SQL database без проблем, все хорошо.Но когда я unistalled 2010 года заменили на excel 2016 версию.У моего проекта было

«Исключение:« System.Runtime.InteropServices.SEHException »в System.Data.dll»

System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception.
   at System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper)
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at WpfApplication5.MainWindow.Laygia() in G:\WpfApplication5 - Copy (8)-20181003T095641Z-001\WpfApplication5 - Copy (8)\WpfApplication5\MainWindow.xaml.cs:line 2463

Это мой код:

                using (FileStream fs = new FileStream(linkpath0, FileMode.Open))
            {
                using (StreamReader rd = new StreamReader(fs, Encoding.UTF8))

                {// linkpath = C:\Users\Win8.1 VS10 X64\Google Drive
                    String linkpath = rd.ReadToEnd();

                    string path1 = linkpath + @"\xBanggia\xBanggia.xlsm";
                    string excelConnectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0 Xml", path1);

                    // Create Connection to Excel Workbook 
                    using (OleDbConnection connection =
                                 new OleDbConnection(excelConnectionString))
                    {
                        OleDbCommand command = new OleDbCommand
                                ("SELECT * FROM[Sheet$A0:L]", connection);
                        connection.Open();
                        // Create DbDataReader to Data Worksheet 
                        using (DbDataReader dr = command.ExecuteReader())
                        {
                            // SQL Server Connection String 
                            string sqlConnectionString = @"Data Source=.;Initial Catalog=DemoPricetable;Integrated Security=True";

                            // Bulk Copy to SQL Server 
                            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                            {
                                bulkCopy.DestinationTableName = "Infobanggia";
                                bulkCopy.WriteToServer(dr);
                                //  MessageBox.Show("!!!!!!!!!!!!!!The data has been exported succefuly from Excel to SQL");
                            }
                            connection.Close();
                        }
                    }
                }
            }

Когда я отлаживаю его через исключение вокруг строки:

             OleDbCommand command = new OleDbCommand
                                ("SELECT * FROM[Sheet$A0:L]", connection);:

Это то, что я пытался:

Я пытаюсь изменить library из Officeи Excel из 14.0->16.0

Использование только файла Excel, но отдельных версий excel (2010 и 2016)

Я рад, что эта проблема связана с upgrading Excelверсия

Большое спасибо !!!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...