2010-09-06 22 views
0

我编写了一个小型表单,它从数据库表(SQL CE 3.5)读取数据并将其显示在DataGridView控件中。这工作正常。然后我修改它以在显示数据之前对数据进行更改,这似乎也可以正常工作,但它似乎并未将更改实际提交到数据库。代码如下:无法将DataSet更改提交到数据库

 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的服务器资源管理器的表,不显示任何变化表。

我在做什么错?

+0

.update方法没有错误(在粘贴的代码之外尝试捕获是不是隐藏它)? – ktharsis 2010-09-10 13:57:02

+0

@ktharsis - 不,不是 – 2010-09-10 14:23:43

回答

1

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

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

0

不应该更新行

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

Update()被重载,它可以是。这仍然不起作用。 – 2010-09-10 08:32:49

0

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

您是否也尝试过使用Sql Server Express来消除CE数据适配器的任何问题?

+0

如果我不能收回我的赏金,我不如捐出它。至少被怀疑是TableAdapter – 2010-09-13 11:42:17

相关问题