Сохранение данных DataGridView в базу данных SQL Server Winform

Вот пример изображения пользовательского интерфейса:

образ

Я работаю над проектом, который будет импортировать файл Excel и отображать данные в DataGridView через форму Windows. Импорт файла Excel и его отображение в DataGridView отлично работает, у меня возникают проблемы с сохранением данных в DataGridView в качестве объемной вставки, когда я нажимаю кнопку «Сохранить», на которой отображается

Снимок экрана об ошибке:

ошибка

Необработанное исключение типа «System.ArgumentException» произошло в System.Data.dll

Когда я просматриваю детали, это показывает:

Нет сопоставления с типом объекта System.Windows.Forms.DataGridViewTextBoxColumn для известного типа управляемого управляемого поставщика.

Код:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb; using System.Data.SqlClient; 

СОХРАНИТЬ КНОПКУ КНОПКИ

  private void btn_Save_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { string constring = @"Data Source=databasename;Initial Catalog=Rookies;Integrated Security=True"; using(SqlConnection con = new SqlConnection(constring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO tbl_prospects ([prospectid], [firstname], [lastname], [height], [weight], [age], [college])VALUES(@prospectid, @firstname, @lastname, @height, @weight, @age, @college)", con)) { cmd.Parameters.AddWithValue("@prospectid", prospectidDataGridViewTextBoxColumn); cmd.Parameters.AddWithValue("@firstname", firstnameDataGridViewTextBoxColumn); cmd.Parameters.AddWithValue("@lastname", lastnameDataGridViewTextBoxColumn); cmd.Parameters.AddWithValue("@height", heightDataGridViewTextBoxColumn); cmd.Parameters.AddWithValue("@weight", weightDataGridViewTextBoxColumn); cmd.Parameters.AddWithValue("@age", ageDataGridViewTextBoxColumn); cmd.Parameters.AddWithValue("@college", collegeDataGridViewTextBoxColumn); con.Open(); cmd.ExecuteNonQuery(); con.Close(); } } } MessageBox.Show("Successfully Saved!"); } } } 

Я также включил другие коды ниже

КНОПКА КОДА ПРОСМОТРА

  private void btn_Browse_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.txt_Path.Text = openFileDialog1.FileName; } } 

КНОПКА КНОПКИ НАГРУЗКИ

  private void btn_Load_Click(object sender, EventArgs e) { string PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + txt_Path.Text + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";"; OleDbConnection conn = new OleDbConnection(PathConn); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + txt_Sheet.Text + "$]", conn); DataTable DT = new DataTable(); myDataAdapter.Fill(DT); dataGridView1.DataSource = DT; } 

Я новичок в кодировании C # и пытаясь его изучить, это будет мое первое приложение, если когда-либо, если кто-нибудь может мне помочь, что мне нужно сделать заранее.

Вы можете напрямую использовать SqlBulkCopy для записи данных на сервер Sql, вместо того, чтобы делать это подряд за строкой.

 string constring = @"Data Source=databasename;Initial Catalog=Rookies;Integrated Security=True"; using (var bulkCopy = new SqlBulkCopy(constring )) { bulkCopy.BatchSize = 500; bulkCopy.NotifyAfter = 1000; bulkCopy.DestinationTableName = "TableName"; bulkCopy.WriteToServer(dataTable); } 

Существуют различные конструкторы SqlBulkCopy для передачи SqlConnection и SqlTransaction.

вы можете получить значения из каждой строки, как это

 foreach (DataGridViewRow row in dataGridView.Rows) { // your code cmd.Parameters.AddWithValue("@prospectid",row.Cells["ColumnName"].Value.ToString()); } 

Мое первое замечание: используйте только 1 раз объект SqlConnextion, и теперь лучше добавить объект SqlTransaction, чтобы избежать частичной записи данных в случае ошибки в строке DataGridView. для ответа вам нужно указать значение ячейки каждого столбца

 private void btn_Save_Click(object sender, EventArgs e) { string constring = @"Data Source=databasename;Initial Catalog=Rookies;Integrated Security=True"; SqlConnection con = new SqlConnection(constring); SqlTransaction transaction = con.BeginTransaction(); try { con.Open(); foreach (DataGridViewRow row in dataGridView1.Rows) { using (SqlCommand cmd = new SqlCommand("INSERT INTO tbl_prospects ([prospectid], [firstname], [lastname], [height], [weight], [age], [college])VALUES(@prospectid, @firstname, @lastname, @height, @weight, @age, @college)", con)) { cmd.Parameters.AddWithValue("@prospectid", row.Cells["prospectid"].Value); cmd.Parameters.AddWithValue("@firstname", row.Cells["firstname"].Value); cmd.Parameters.AddWithValue("@lastname", row.Cells["lastname"].Value); cmd.Parameters.AddWithValue("@height", row.Cells["height"].Value); cmd.Parameters.AddWithValue("@weight", row.Cells["weight"].Value); cmd.Parameters.AddWithValue("@age", row.Cells["age"].Value); cmd.Parameters.AddWithValue("@college", row.Cells["college"].Value); cmd.Transaction = transaction; cmd.ExecuteNonQuery(); } } transaction.Commit(); con.Close(); MessageBox.Show("Successfully Saved!"); } catch (Exception ex) { transaction.Rollback(); con.Close(); MessageBox.Show(ex.Message); } } 
  • Быстрый переход из Excel в DataSet или DataGridView
  • Разные пользователи не могут одновременно использовать мое приложение WinForms
  • Чтобы получить список всего текста управления / заголовка решения Visual Studio
  • Как экспортировать в excel из winform vb.net 2008 без установленного офиса?
  • Как преобразовать объект в datatable в C #
  • Не удалось закрыть процесс Excel из приложения VB.NET
  • Как импортировать Excel в datagridview быстрее, используя vb.net
  • Копирование данных с пропущенными столбцами из Excel и вставка в DataGridView
  • C # Тестирование модуля Windows Form
  • Как включить copy-paste из Excel в пользовательский DataGridView?
  • Как заставить функцию поля данных изменить счет на сумму в EPPlus?
  • Interesting Posts

    Частично отсутствующие линии сетки на диаграммах логарифмической шкалы в Excel 2007

    Ошибка 1004 при настройке местоположения HPageBreak

    Поиск последней строки в Excel из VB.NET

    Как импортировать данные из Excel в Access и получать внешние ключи

    Excel / VBA: цикл через столбец, заменяющий ячейку содержимым из другого столбца

    Как использовать переменную Range в качестве аргумента подпрограммы

    Вставить выбор диапазона переменных из одной книги в другую книгу, начиная с определенной ячейки

    возвращает имена столбцов вместе с результатом в oracle select query- для экспорта в excel

    Как использовать формулы массива Excel для UDF для правильной прочтения каждой ячейки?

    Ошибка MaxLocksPerFile в доступе для импорта в Excel

    уникальность активного листа VBA EXCEL

    Excel VBA Сравните два списка в Листе 1 и 2 Столбец А, затем объедините соседние ячейки спичек в листе

    VBA не откроет ppt-файл с сетевого диска

    Как добавить изображение из Интернета в качестве фонового изображения для диаграммы в Mac Excel 2011

    Почему Spreadsheet :: XLSX :: Utility2007 xls2csv округляется до двух десятичных знаков?

    Давайте будем гением компьютера.