Задать вопрос
@Kobe_kobe

Не сохраняет изменения в базу данных

Есть форма с datagridview. При нажатие на кнопку "изменить данные" открывается новая форма, где выводится в текст боксы данные текущей строки из datagridview. Дальше при удачном заполнении, создаю DataRow и изменяю данные. В datagridview выводит изменения, но в саму базу не сохраняет (т.е. после перезапуска приложения данные прежние). Добавление и удаление данных работают. Не пойму, в чем ошибка.

Форма с datagridview
private void button4_Click(object sender, EventArgs e)
        {

            string kod = dgv_med[0, dgv_med.CurrentRow.Index].Value.ToString();
            string name = dgv_med[1, dgv_med.CurrentRow.Index].Value.ToString();
            string typemed = dgv_med[2, dgv_med.CurrentRow.Index].Value.ToString();
            EditMed EditMed = new EditMed(kod, name, typemed);
           
            if (EditMed.ShowDialog() != DialogResult.OK)
          {
                MessageBox.Show("Мед. учреждение не изменено");
                return;
            }

            DataRow myRow = DataSet.Tables["MedTable"].Rows.Find(kod);
                myRow.BeginEdit();
                  myRow["Kod_med"] = EditMed.MedId;
                  myRow["Nazvanie"] = EditMed.MedName;
                  myRow["Type"] = EditMed.MedType;
                myRow.EndEdit();
                DataSet.Tables["MedTable"].AcceptChanges();
                dal.SaveChanges(DataSet);
            }


Форма редактирования
public partial class EditMed : Form
    {
 
        public int MedId
        {
            get { return int.Parse(txtKod.Text); }
        }
 
        public string MedName
        {
            get { return txtName.Text.Trim(); }
        }
 
        public string MedType
        {
            get { return txtType.Text.Trim(); }
        }
        public EditMed(string Kod, string name, string typemed)
        {
            InitializeComponent();
            txtKod.Text = Kod;
            txtName.Text = name;
            txtType.Text = typemed;
            txtKod.Text.Trim();
            txtName.Text.Trim();
            txtType.Text.Trim();
        }
 
        private void btn_saveEditMed_Click(object sender, EventArgs e)
        {
 
            if (String.IsNullOrEmpty(txtKod.Text.Trim()) ||
                String.IsNullOrEmpty(txtName.Text.Trim()) ||
                String.IsNullOrEmpty(txtType.Text.Trim())
                )
                DialogResult = DialogResult.No;
            else
                DialogResult = DialogResult.OK;
        }
    }


Подключение бд
class Dal
    {
        
        string connectionString = ConfigurationManager.ConnectionStrings["RSPK1managerConnectionString"].ConnectionString;
        DataSet DataSet;
        SqlDataAdapter medDA, prihodDA;
        SqlCommandBuilder MedCB;
        public Dal()
        {
            DataSet = new DataSet("RSPK");
            medDA = new SqlDataAdapter("SELECT * FROM Med ORDER by Kod_Med", connectionString);
            prihodDA = new SqlDataAdapter("SELECT * FROM prihod ORDER by Kod_prihod", connectionString);
            
            //Билдер вставка удаление обновление данных
            MedCB = new SqlCommandBuilder(medDA);
        }
 
        public DataSet GetAllData()
        {
            try
            {
                medDA.Fill(DataSet,"MedTable");
                prihodDA.Fill(DataSet, "PrihodTable");
                DataSet.Tables[0].PrimaryKey = new DataColumn[] { DataSet.Tables[0].Columns[0] };
                DataSet.Tables[0].Columns[0].Unique = true;
 
                DataRelation prskDR = new DataRelation("Medprihod",
                 DataSet.Tables["MedTable"].Columns["Kod_med"],
                 DataSet.Tables["PrihodTable"].Columns["Kod_otprav"]);
 
                DataSet.Relations.Add(prskDR);
            }
            catch
            {
 
            }
 
            return DataSet;
        }
 
        internal bool SaveChanges(DataSet DataSet_)
        {
            try
            {
                medDA.Update(DataSet_.Tables["MedTable"]);
            }
            catch
            {
                return false;
            }
            return true;
        }
  • Вопрос задан
  • 7733 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@Kobe_kobe Автор вопроса
Проблему устранил. Оказалось, что DataSet.Tables["MedTable"].AcceptChanges(); не нужен.

"DataSet.AcceptChanges помечает датасет как неизменённый.
Чтобы сохранить данные, нужно вызвать у адаптера Update. При этом на все несохранённые изменения сгенерятся команы обновления БД. Соответственно, если AcceptChanges вызвать перед этим, в БД тоже ничего не сохранится."
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы