无法将DataSet更改提交到数据库

时间:2010-09-06 10:09:28

标签: c# visual-studio-2008

我编写了一个从数据库表(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 个答案:

答案 0 :(得分:1)

我找到了。花了几天但我找到了。

Properties.Settings.Default.Form1ConnectionString是“Data Source = | DataDirectory | \ Form1.sdf”。如果我替换自动生成的“| DataDirectory |”,则更新有效与实际的路径。奇怪的是,从数据库中读取的任何一种方式都可以。

答案 1 :(得分:0)

更新行不应该是

adapter.Update(myDataSet, "People")

答案 2 :(得分:0)

我会确保DataSet认为它已被更改。调用DataSet.HasChanges(返回bool)和DataSet.GetChanges,它返回原始数据集的增量。

您是否也尝试过针对Sql Server Express,以消除CE数据适配器的任何问题?