Невозможно зафиксировать изменения набора данных в базе данных - PullRequest
0 голосов
/ 06 сентября 2010

Я написал небольшую форму, которая считывает данные из таблицы базы данных (SQL CE 3.5) и отображает их в элементе управления DataGridView.Это отлично работает.Затем я изменил его, чтобы внести изменения в данные перед его отображением, что также, кажется, работает нормально, за исключением того, что оно, по-видимому, фактически не фиксирует изменения в базе данных.Код выглядит следующим образом:

        using (SqlCeConnection conn = new SqlCeConnection(
            Properties.Settings.Default.Form1ConnectionString
            )) {

            conn.Open();
            using (SqlCeDataAdapter adapter = new SqlCeDataAdapter(
                "SELECT * FROM People", conn
                )) {

                //Database update command
                adapter.UpdateCommand = new SqlCeCommand(
                    "UPDATE People SET name = @name " +
                    "WHERE id = @id", conn);
                adapter.UpdateCommand.Parameters.Add(
                    "@name", SqlDbType.NVarChar, 100, "name");
                SqlCeParameter idParameter = adapter.UpdateCommand.Parameters.Add(
                    "@id", SqlDbType.Int);
                idParameter.SourceColumn = "id";
                idParameter.SourceVersion = DataRowVersion.Original;

                //Create dataset
                DataSet myDataSet = new DataSet("myDataSet");
                DataTable people = myDataSet.Tables.Add("People");

                //Edit dataset
                adapter.Fill(myDataSet, "People");
                people.Rows[0].SetField("name", "New Name!");
                adapter.Update(people);

                //Display the table contents in the form datagridview
                this.dataGridView1.DataSource=people;
            }
        }

Форма выглядит следующим образом:

alt text

Однако, глядя на таблицу через обозреватель сервера Visual Studio, это не так.показать какие-либо изменения в таблице.

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 10 сентября 2010

Я нашел это. Потребовались дни, но я нашел это.

Properties.Settings.Default.Form1ConnectionString имеет значение «Источник данных = | DataDirectory | \ Form1.sdf». Обновление работает, если я заменяю автоматически сгенерированный «| DataDirectory |» с фактическим путем. Как ни странно, чтение из базы данных работает в любом случае.

0 голосов
/ 09 сентября 2010

Я бы убедился, что DataSet считает, что он был изменен.Вызовите DataSet.HasChanges (возвращает bool) и DataSet.GetChanges, которые возвращают дельту DataSet из оригинала.

Вы также пробовали это для Sql Server Express просто для устранения любых проблем с адаптером данных CE?

0 голосов
/ 09 сентября 2010

Разве строка обновления не должна быть

adapter.Update(myDataSet, "People")
...