Как заполнить SQL таблицу из DataGridView - PullRequest
0 голосов
/ 04 апреля 2020

Я должен заполнить SQL таблицу из DataGridView. Проблема заключается в том, что у меня есть куча таблиц с различным количеством столбцов, и я не могу написать простой скрипт, чтобы заполнить его «строка за строкой», поэтому я решил собрать данные sh с помощью DataTable, но я получаю ошибка

Параметр типа таблицы "@data" должен иметь правильное имя типа

Мой код:

private void button1_Click(object sender, EventArgs e)
{
        SqlDataReader sqlReader = null;

        SqlConnection sqlConnection = new SqlConnection(connectionString);
        sqlConnection.Open();

        var dt = new DataTable();

        dt = (DataTable)dataGridView1.DataSource;

        try
        {
            using (SqlCommand command = new SqlCommand(@"DELETE FROM [DB].[dbo].[" + comboBox1.SelectedItem.ToString()+ "]; INSERT INTO [DB].[dbo].[" + comboBox1.SelectedItem.ToString()+ "] VALUES (@data)",sqlConnection))
            {
                command.Parameters.AddWithValue("@data", dt);
                command.ExecuteNonQuery();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            if (sqlReader != null)
                sqlReader.Close();
        }
}

comboBox1.SelectedItem.ToString() возвращает таблицу имя.

Первая часть запроса - удаление таблицы, так как в противном случае она будет дублировать неизмененную информацию, после чего я отправляю ее обратно, поскольку dataGridView имеет все данные

1 Ответ

0 голосов
/ 04 апреля 2020

Можете ли вы использовать SqlBulkCopy ?

Сложной частью будет совпадение имен столбцов

Если вы не можете использовать эту опцию, есть опция используйте Таблица значений параметров

Также вместо DELETE FROM [dbo].[table] вас может заинтересовать TRUNCATE TABLE [dbo].[table] команда

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