SqlBulkCopy из данных Interop.Excel

C Sharp > SqlBulkCopy из данных Interop.Excel
03.02.2018 11:01:03


Наиболее часто встречающиеся слова в статье:

[col_cells] [m_workSheet] [ToString] [connection] [Columns] [Console] [WriteLine] [ExcelAppR] [Message] [SqlConnection]


Статья:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace bcc_metadata
{
    class Program
    {
      static void Main(string[] args)
        {
            string f1 = ""; string f2 = "";
            string f3 = ""; string f4 = "";
            string f5 = "";
 
            Program inDb = new Program();
            inDb.truncateDB();
 
            // заполнение  рабочей bcc_metatada
            Excel.Application ExcelAppR = new Excel.Application();
            Excel.Workbook ObjWorkBook; 
            ObjWorkBook = ExcelAppR.Workbooks.Open(@"C:\razrabotka\работа\bcc_metadata\bcc_metadata\bin\Debug\input.xlsx");            
            try
            {
                // создадим таблицу
                DataTable dt = new DataTable();
                dt.Columns.Add("id");
                dt.Columns.Add("f1");
                dt.Columns.Add("f2");
                dt.Columns.Add("f3");
                dt.Columns.Add("f4");
                dt.Columns.Add("f5");
                DataRow row;
                int i = 0;
                Excel.Worksheet m_workSheet = (Excel.Worksheet)ExcelAppR.Worksheets[1];
                String rez = "";
                int col_cells = 1;
                Console.WriteLine("Начало вставки рабочей таблицы в память");
                // перебор построчный excel
 
                Excel.Range range = (Excel.Range)m_workSheet.Cells[1, 1];
                if ((object)range.Value != null)
                    rez = range.Value.ToString();
                else rez = "";
                while (rez.Length > 4)
                {
                    i++;
                    row = dt.NewRow();
                    range = (Excel.Range)m_workSheet.Cells[col_cells, 1];
                    if ((object)range.Value != null)
                        rez = range.Value.ToString();
                    else rez = "";
                    f1 = rez; row[0] = i; row[1] = rez.Trim();
                    range = (Excel.Range)m_workSheet.Cells[col_cells, 2];
                    if ((object)range.Value != null)
                        rez = range.Value.ToString();
                    else rez = "";
                    f2 = rez; row[2] = rez.Trim();
                    range = (Excel.Range)m_workSheet.Cells[col_cells, 3];
                    if ((object)range.Value != null)
                        rez = range.Value.ToString();
                    else rez = "";
                    f3 = rez; row[3] = rez.Trim();
                    range = (Excel.Range)m_workSheet.Cells[col_cells, 4];
                    if ((object)range.Value != null)
                        rez = range.Value.ToString();
                    else rez = "";
                    f4 = rez; row[4] = rez.Trim();
                    range = (Excel.Range)m_workSheet.Cells[col_cells, 5];
                    if ((object)range.Value != null)
                        rez = range.Value.ToString();
                    else rez = "";
                    f5 = rez; row[5] = rez.Trim();
                    //получим первый столюец  с текущей  ячейкой  для  проверки не заначивать ли цикл
                    range = (Excel.Range)m_workSheet.Cells[col_cells, 1];
                    if ((object)range.Value != null)
                        rez = range.Value.ToString();
                    else rez = "";
                    dt.Rows.Add(row);
                    col_cells = col_cells + 1;
                    // вставим в БД
                    //inDb.insertDB(f1,f2,f3,f4,f5);
                }
                //Вставим массво
                Console.WriteLine("Начало вставки рабочей таблицы в DB");
                inDb.BuilkDB(dt);
            }
            catch (Exception ex) { Console.WriteLine(ex.Message); }
            finally
            {
                // закрываем
                ObjWorkBook.Close(false, null, null);
                ExcelAppR.Quit();
            }
    
 
        }
 
         
        public void BuilkDB(DataTable dt)
        {
            //-----
            string connectionstring2 = "Data Source=i7.iocsha;User ID=io;Password=bvff4;Initial Catalog=ti";
            using (SqlConnection connection = new SqlConnection(connectionstring2))
            {
                connection.Open();
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
                {
                    bulkCopy.DestinationTableName = "dbo.bcc_metatada";
 
                    try
                    {
                        // Write from the source to the destination.
                        bulkCopy.WriteToServer(dt);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
                //-----
            }
        }
 
       
        public void truncateDB()
        {
            // Всавка новой  записи в базу данных
            using (SqlConnection connection = new SqlConnection(connectionstring))
            {
 
                // Прописать запрос на вставку
                string q = "use ti;truncate table bcc_metatada; truncate table bcc_metatada_test;";
 
                // Создать команду на вставку
                SqlCommand command = new SqlCommand(q, connection);
 
                // Открыть соединение и выполнить запрос
                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }
                catch (SqlException odbcEx)
                {
                    Console.WriteLine("Insert failed" + odbcEx.Message);
 
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine("Insert failed" + ex.Message);
 
                }
                finally
                {
                    connection.Close();
                }
 
            }
            //--------------------------------
        }
 
 
    }
}