Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Импорт из excel в sql


Автор: Grigorill 15.1.2012, 14:18
Здравствуйте! Столкнулся с проблемой есть sql таблица с артикулами в нее необходимо добавить столбец из excel. Сначала выгружаю  данные из excel 
Код

OpenFileDialog opf = new OpenFileDialog();
            opf.Filter = "Excel (*.xls)|*.xls";
            opf.ShowDialog();
            filename = opf.FileName;
            if (filename == "")
            {
                MessageBox.Show("Файл не выбран");
            }
            else
            {
                OleDbConnection theConnection = new OleDbConnection(string.Format("provider=Microsoft.Jet.OLEDB.4.0;data source={0};Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"",filename));
                theConnection.Open();
                OleDbDataAdapter theDataAdapter = new OleDbDataAdapter("SELECT * FROM [Лист1$]", theConnection);
                DataSet theDS = new DataSet();
                DataTable dt = new DataTable();
                theDataAdapter.Fill(dt);
                this.dataGridView1.DataSource = dt.DefaultView;
            }

В excel файле всегда 1 столбец.
Далее эти данные нужно добавить во 2 столбец sql таблицы.Пробовал сначала загрузить sql таблицу в datagid потом добавить данные из excel потом update-ить, но думаю это как то неправильно.  Как решить такую проблему? Заранее спасибо.

Автор: Данкинг 15.1.2012, 14:55
Т.е. первая строка таблицы в SQL соответствует первой строке на листе в XLS, вторая - второй и так далее?

Автор: Grigorill 15.1.2012, 14:58
Да.

Автор: Данкинг 15.1.2012, 15:12
Так иди в цикле по таблице и записывай в нужную колонку значение из xls.

Добавлено через 48 секунд
Ну или наоборот: цикл по листу xls, а значение пишешь в колонку той строчку, которая соответствует значению переменной цикла.

Автор: Grigorill 15.1.2012, 19:57
Вот решение
Код

                 string sExcelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFilePath + ";Extended Properties=" + "\"Excel 8.0;HDR=YES;\"";

                string sSqlConnectionString = "AttachDbFilename=C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.MSSQLSERVER\\MSSQL\\DATA\\cover.mdf;Integrated Security=SSPI;";
              
                string sClearSQL = "DELETE FROM " + sSQLTable;
                SqlConnection SqlConn = new SqlConnection(sSqlConnectionString);
                SqlCommand SqlCmd = new SqlCommand(sClearSQL, SqlConn);
                SqlConn.Open();
                SqlCmd.ExecuteNonQuery();
                SqlConn.Close();
                 OleDbConnection OleDbConn = new OleDbConnection(sExcelConnectionString);
                OleDbCommand OleDbCmd = new OleDbCommand(myExcelDataQuery, OleDbConn);
                OleDbConn.Open();
                OleDbDataReader dr = OleDbCmd.ExecuteReader();
                SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString);
                bulkCopy.DestinationTableName = sSQLTable;
                while (dr.Read())
                {
                    bulkCopy.WriteToServer(dr);
                }
                OleDbConn.Close();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)