С# SqlCeDataAdapter не обновляет значения из базы данных при вызове Adapter.Update() после изменения значений из datagridview

у меня есть код, который содержит локальную базу данных «database1.sdf» вместе с таблицей «Сотрудники» с некоторыми значениями. Я добавляю все строки из базы данных в представление данных, используя свойство Datagridview.Datasource. Все строки извлекаются из таблицы! Отлично! когда я пытаюсь обновить значение столбца из datagridview, оно не обновляется из базы данных. такая же проблема возникает при удалении строки, а также при добавлении новой строки. При запуске программы исключений не возникает.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
namespace demoDatabaseOperations
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public SqlCeConnection con = new SqlCeConnection("Data source=Database1.sdf");
    public DataTable dt = new DataTable();

    public SqlCeDataAdapter adptr;
    public SqlCeCommandBuilder cmdBuilder;
    private void Form1_Load(object sender, EventArgs e)
    {

        con.Open();

        if (con.State == ConnectionState.Open)
        {
            adptr = new SqlCeDataAdapter("select * from employees", con);
            cmdBuilder = new SqlCeCommandBuilder(adptr);

            adptr.UpdateCommand = cmdBuilder.GetUpdateCommand();

            adptr.Fill(dt);
            this.dataGridView1.DataSource = dt;

        }
      }

    //Button For Update/delete/insert values to the database
    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            adptr.Update(dt);
            adptr.Dispose();
        }
        catch (Exception f) { MessageBox.Show(f.ToString()); }

    }
}

}

У кого-нибудь есть решение для этого?

заранее спасибо


person Lazy Programer    schedule 07.11.2017    source источник
comment
Вы уверены, что у adptr есть инструкции по обновлению?   -  person BugFinder    schedule 07.11.2017
comment
См. msdn. microsoft.com/en-us/library/ в качестве примера - вы не показали ни одной части обновления в своем коде   -  person BugFinder    schedule 07.11.2017
comment
@BugFinder нам нужно вручную создать инструкцию по обновлению, например «обновить столбец набора имени таблицы ...»? или adptr.UpdateCommand = cmdBuilder.GetUpdateCommand(); это автоматически сгенерирует эти инструкции для значения обновления при изменении столбца из datagridview?   -  person Lazy Programer    schedule 07.11.2017
comment
попробуйте полностью удалить эту строку adptr.UpdateCommand = cmdBuilder.GetUpdateCommand();   -  person Abdou    schedule 07.11.2017
comment
@Абду не работает! Та же проблема все еще существует!   -  person Lazy Programer    schedule 07.11.2017
comment
вы должны установить точку останова непосредственно перед вызовом adptr.Update(dt); и проверьте, действительно ли изменились данные в dataTable   -  person Abdou    schedule 07.11.2017
comment
@Abdou, проблема в том, что когда я обновляю/удаляю/вставляю строку, она будет обновляться из datagridview. хорошо, когда я снова открою, exe покажет все недавно обновленные значения! я имею в виду, что строка, которая обновляется/удаляется/вставляется, отображается отлично. когда я проверяю таблицу базы данных, эти обновленные значения не будут отображаться, а таблица вообще не обновляется. после проверки базы данных исполняемый файл показывает те же старые значения базы данных, которые не обновляются при повторном открытии,   -  person Lazy Programer    schedule 07.11.2017
comment
Вы уверены, что открываете тот же файл базы данных, на который обновляется ваше приложение?   -  person Abdou    schedule 07.11.2017
comment
Думаю, я знаю, что происходит. вы поместили файл базы данных в корневую папку вашего проекта и добавили его в свой проект, когда вы создаете свой проект, этот файл копируется в папку отладки, и этот скопированный файл является тем, который обновляет ваше приложение   -  person Abdou    schedule 07.11.2017
comment
@Абду да Точно! какое решение для этого?   -  person Lazy Programer    schedule 07.11.2017
comment
проверьте папку Debug на наличие другого файла Database1.sdf и проверьте, не изменен ли этот файл.   -  person Abdou    schedule 07.11.2017
comment
ну, вы можете просто указать абсолютный путь к вашей базе данных в строке подключения Источник данных = C:/‹путь к файлу›/Database1.sdf   -  person Abdou    schedule 07.11.2017
comment
Я скопировал решение как ответ, выберите его как лучший ответ, если он вам помог   -  person Abdou    schedule 07.11.2017


Ответы (1)


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

вы можете просто указать абсолютный путь к файлу базы данных в строке подключения Источник данных = C://Database1.sdf

person Abdou    schedule 07.11.2017
comment
Хороший! Проблема заключается в обновлении database.sdf более новой версией! - person Lazy Programer; 08.11.2017