Сохранить данные из Excel в DataGrid, из DataGrid в SQL

Рейтинг: 0Ответов: 0Опубликовано: 02.05.2023

Нужно сохранить данные из Excel в Datagrid. Читаю Excel через ClosedXML.Excel. Данные собираются, попадают в грид, но сохранить весь грид в бд никак не получается, кучу способов перепробовал. Ниже открытие и чтение Excel файла.

internal class Metric
    {
        public int IDОбращения { get; set; }
        public string IdКлиента { get; set; }
        public string ФИО { get; set; }
        public string НомерТелефона { get; set; }
        public string Email { get; set; }
        public string Услуга { get; set; }
        public string Статус { get; set; }
        public string ОценкаКлиента { get; set; }
    }
    public IEnumerable<Metric> EnumerateMetrics(string xlsxpath)
    {

        using (var workbook = new XLWorkbook(xlsxpath))


        using (var worksheet = workbook.Worksheets.Worksheet(1))
        {
            int n = workbook.Worksheet(1).LastRowUsed().RowNumber();
            for (int row = 5; row < n + 1 ; ++row)
            {
                var me = new Metric
                {
                    IDОбращения = worksheet.Cell($"A{row}").GetValue<int>(),
                    IdКлиента = worksheet.Cell($"B{row}").GetValue<string>(),
                    ФИО = worksheet.Cell($"C{row}").GetValue<string>(),
                    НомерТелефона = worksheet.Cell($"D{row}").GetValue<string>(),
                    Email = worksheet.Cell($"E{row}").GetValue<string>(),
                    Услуга = worksheet.Cell($"F{row}").GetValue<string>(),
                    Статус = worksheet.Cell($"G{row}").GetValue<string>(),
                    ОценкаКлиента = worksheet.Cell($"H{row}").GetValue<string>(),
                };
                yield return me;
            }
        }
    }

Далее код заполнения Datagrid, чтение строк в DataTable и сохранение в бд

            private ExcelImportSheet ex = new ExcelImportSheet();
    public void Button_Click_8(object sender, RoutedEventArgs e)
    {
        var openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
        if ((bool)openFileDialog.ShowDialog())
        {
            string path = openFileDialog.FileName;
            dg2.ItemsSource = ex.EnumerateMetrics(path);


            DataTable dt = new DataTable();
            foreach (DataGridColumn column in dg2.Columns)
            {
                if (column is DataGridTextColumn)
                {
                    dt.Columns.Add(column.Header.ToString(), typeof(int));
                }
                else if (column is DataGridCheckBoxColumn)
                {
                    dt.Columns.Add(column.Header.ToString(), typeof(string));
                }
            }

            foreach (object item in dg2.SelectedItems)
            {
                DataRowView rowView = (DataRowView)item;
                DataRow row = dt.NewRow();

                foreach (DataGridColumn column in dg2.Columns)
                {
                    if (column is DataGridTextColumn)
                    {
                        string value = (rowView[column.Header.ToString()]).ToString();
                        row[column.Header.ToString()] = value;
                    }
                    else if (column is DataGridCheckBoxColumn)
                    {
                        int value = (int)(rowView[column.Header.ToString()]);
                        row[column.Header.ToString()] = value;
                    }
                }

                dt.Rows.Add(row);


                string connectionString = @"Data Source=DESKTOP-4RVGC6V;Initial Catalog=Clientsmfc;Integrated Security=True";
                SqlConnection Con = new SqlConnection(connectionString);
                Con.Open();
                SqlCommand cmd = new SqlCommand("INSERT INTO MyTable (IDОбращения, IdКлиента, ФИО, НомерТелефона, Email, Услуга, Статус, ОценкаКлиента) VALUES (@IDОбращения, @IdКлиента, @ФИО, @НомерТелефона, @Email, @Услуга, @Статус, @ОценкаКлиента)", Con);

                cmd.Parameters.Add("@IDОбращения", SqlDbType.Int, 50, "IDОбращения");
                cmd.Parameters.Add("@IdКлиента", SqlDbType.NVarChar, 50, "IdКлиента");
                cmd.Parameters.Add("@ФИО", SqlDbType.NVarChar, 50, "ФИО");
                cmd.Parameters.Add("@НомерТелефона", SqlDbType.NVarChar, 50, "НомерТелефона");
                cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 40, "Email");
                cmd.Parameters.Add("@Услуга", SqlDbType.NVarChar, 500, "Услуга");
                cmd.Parameters.Add("@Статус", SqlDbType.NVarChar, 50, "Статус");
                cmd.Parameters.Add("@ОценкаКлиента", SqlDbType.NVarChar, 5, "ОценкаКлиента");


                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.InsertCommand = cmd;

                adapter.Fill(dt);

                Con.Close();
            }
        }
    }

Ответы

Ответов пока нет.