#c# #sql-server
Вопрос:
У меня есть две таблицы с внешним ключом, первая из которых:
tblFile : идентификатор файла, имя файла…
А во-вторых, это:
tblChild (в представлении Datagridview) : идентификатор ребенка, имя ребенка, дата рождения, fkFileID.
При нажатии кнопки Сохранить (в форме), как я могу обновить все строки во второй таблице, если добавить, Отредактировать или Удалить строки? (Форма, например: https://i.postimg.cc/jq7Ks3CW/1.jpg)
Я пробовал этот код и другие:
string ChID; using (SqlCommand cmd = new SqlCommand("SELECT ChildID FROM tblChild WHERE ChildID = @ChildID", con)) { cmd.Parameters.AddWithValue("@ChildID", dgv.Rows[0].Cells[0].Value ?? DBNull.Value); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); if (dt.Rows.Count gt; 0) { foreach (DataGridViewRow rowCh in dgv.Rows) { ChID = dt.Rows[0]["ChildID"].ToString(); if (ChID == rowCh.Cells[0].Value.ToString()) { using (SqlCommand cmdCh = new SqlCommand("UPDATE tblChild SET ChildName = @ChildName, ChildBirthDate = @ChildBirthDate, fkFileID = (SELECT FileID FROM tblFile WHERE FileID = @FileID) WHERE ChildID = @ChildID", ClsDB.con)) { cmdCh.Parameters.Clear(); cmdCh.Parameters.AddWithValue("@ChildID", rowCh.Cells[0].Value ?? DBNull.Value); cmdCh.Parameters.AddWithValue("@ChildName", rowCh.Cells[1].Value ?? DBNull.Value); cmdCh.Parameters.AddWithValue("@ChildBirthDate", rowCh.Cells[2].Value ?? DBNull.Value); cmdCh.Parameters.AddWithValue("@FileID", txtID.Text.Trim()); cmdCh.ExecuteNonQuery(); } } } } else { foreach (DataGridViewRow rowCh in dgv.Rows) { using (SqlCommand cmdCh = new SqlCommand("INSERT INTO tblChild (ChildName, ChildBirthDate, fkFileID) VALUES (@ChildName, @ChildBirthDate, (SELECT FileID FROM tblFile WHERE FileID = @FileID))", ClsDB.con)) { cmdCh.Parameters.AddWithValue("@ChildName", rowCh.Cells[1].Value ?? DBNull.Value); cmdCh.Parameters.AddWithValue("@ChildBirthDate", rowCh.Cells[2].Value ?? DBNull.Value); cmdCh.Parameters.AddWithValue("@FileID", txtID.Text.Trim()); cmdCh.ExecuteNonQuery(); } } } }
Комментарии:
1. Задача DbDataAdapter состоит в первую очередь в том, чтобы сохранять изменения, а не просто загружать их. Почему ты им не пользуешься?
2. Спасибо за ваш ответ, я чувствую, что то, что я пробовал, неправильно, как я могу это использовать?
3. Это могло бы помочь вам дать более подробную информацию о вашей проблеме. Вы пробовали этот код….и что произошло / что должно произойти?
4. Неужели это так сложно? вопрос ясен.. Как сохранить все изменения в DGV (Добавить, Отредактировать, Удалить) сразу при нажатии кнопки Сохранить ???