Как сохранить таблицу из DataGridView1 в БД (SQL Server) в файл .mdf?

346
06 июня 2018, 13:30

Отображаю таблицу так:

string SqlText = "SELECT * FROM [Товар]";
SqlDataAdapter da = new SqlDataAdapter(SqlText, ConnStr);
DataSet ds = new DataSet();
da.Fill(ds, "[Товар]");
dataGridView1.DataSource = ds.Tables["[Товар]"].DefaultView;

А вот как сохранить? Может кто поможет с этим? Писал так но коряво

int rowCounter = dataGridView1.RowCount;
    int columnCount = dataGridView1.ColumnCount;
    string[] line = new string[columnCount];
Answer 1

Полагаю, вам нужно не сохранить, а обновить данные. Пользователь мог в датагриде какие-то данные добавить, изменить или удалить.

Для этого нужно вызвать метод Update.

Чтобы он правильно отработал, должны быть заданы свойства InsertCommand, UpdateCommand, DeleteCommand. В примере написано, как это сделать.

Подробнее смотрите Обновление источников данных с объектами DataAdapter.

Answer 2

Есть 2 варианта: полегче и посложнее.

1 - Построчно...

var connString = "MyConnectionString";
try
{   
    using (SqlConnection conn = new SqlConnection(connString))
    {
        using (SqlCommand comm = new SqlCommand())
        {
            comm.Connection = conn;
            conn.Open();
            for (int i = 0; i<dataGridView1.Rows.Count; i++)
            {
                var strQuery = "INSERT INTO tableName (column1, column2, ...)" + 
                           "VALUES (@param1, @param2, ...)";
                comm.CommandText = strQuery;
                comm.Parameters.AddWithValue("@param1", dataGridView1.Rows[i].Cells[myColName1].Text);
                comm.Parameters.AddWithValue("@param2", dataGridView1.Rows[i].Cells[myColName2].Text);
                // больше параметров ...
                comm.ExecuteNonQuery();
            }
            conn.Close();
        }
    }
}
catch (Exception e)
{
    Console.WriteLine(e);
    throw;
}

2 - Через BulkCopy (и хранимые).

// приводим к DataTable а потом пушим во временную таблицу, например.
DataTable data = (DataTable)(dgvMyMembers.DataSource); 

Хотя я рекомендовал бы второй подход только если вы знаете что делаете, а т.ж. у вас большой (очень большой) объем данных.

READ ALSO
Автонастройка на нужное устройство modbus

Автонастройка на нужное устройство modbus

Есть приложение wpf, которое общается с устройством, которое подключается по rs485 и работает по протоколу modbusПример чтения регистров: запрос...

276
Ошибки компиляции MyDataAdapter

Ошибки компиляции MyDataAdapter

Может, что в using добавить надо?

254
Unity отложенное выполнение

Unity отложенное выполнение

Делаю свою кастомную таблицуТо есть UI элемент

247
Как выполнить метод после return в web api?

Как выполнить метод после return в web api?

Код, который должен создать объект, отправить id, а затем обработать в бдПроблема в том, что я не понимаю как Сначала вернуть ответ, а уже потом...

313