使用SqlCeDataAdaptor更新数据库

时间:2011-02-02 19:12:31

标签: c# wpf visual-studio-2008

我从一个访问visual studio 2008 express Edition中的sqlserver的数据集填充listview。我一直在尝试同时更新列表视图和数据库。

SettingTxt.Text引用文本框

使用以下代码,我已经能够使用输入到文本框中的信息更新列表视图,但不会在数据库中执行相同的更新。如果有人可以帮我解决这个问题,我将不胜感激。我知道网上有很多关于这个确切问题的论坛,但我似乎无法让它发挥作用。

thisConnection = new SqlCeConnection("Data Source=AugMedDB.sdf;Password=");
thisConnection.Open();
SqlCeCommand cmd = thisConnection.CreateCommand();
cmd.CommandText = "UPDATE Patient SET Setting = \'" + SettingTxt.Text + "\' WHERE (PtID=0) AND (EquipID=1) AND (Control='Lever')" ;

SqlCeDataAdapter adp = new SqlCeDataAdapter();
adp.UpdateCommand = cmd;
dataSet.Tables[0].Rows[0][2] = SettingTxt.Text;
adp.Update(dataSet);

提前致谢。


从答案中移出:

我目前拥有的是:

SqlCeCommand cmd = thisConnection.CreateCommand();
cmd.CommandText = "SELECT column FROM table WHERE id=0";
SqlCeDataAdapter adp = new SqlCeDataAdapter(cmd);
adp.SelectCommand = cmd;

DataSet ds = new DataSet();
ds = dataS.getDataSet();
adp.Fill(ds, "Patient");

SqlCeCommand comm = thisConnection.CreateCommand();
comm.CommandText = "UPDATE table SET Setting = 'value' WHERE (PtID=0)";
adp.UpdateCommand = comm;
adp.Update(ds, "Patient");

我不理解我发现的所有教程。提前谢谢。

更新

然而,即使是以下简单的事情也不会更新数据库:

SqlCeConnection thisConn = new SqlCeConnection("Data Source=AugMedDB.sdf;Password=");
String query = "UPDATE Patient SET Setting = 'TopyTruck' WHERE (PtID=0) AND (EquipID=1) AND (Control='Lever')";
thisConn.Open();
SqlCeCommand commd = new SqlCeCommand(query, thisConn);
commd.ExecuteNonQuery();
thisConn.Close();

2 个答案:

答案 0 :(得分:1)

您的UPDATE语句不适用于Adapter.Update(),因为它需要参数并且必须与SELECT语句对齐。

您可以尝试直接执行该命令(没有适配器)或创建更好的更新语句(使用数据集设计器)。


更新

填写数据集后,

  • 使用CommandBuilder生成其他SQL语句(我认为它存在于SqlCe中)
  • 或使用您自己的更新命令,不带适配器。只需致电comm.ExecuteNonQuery()
  • 即可

技巧1:创建临时(WinForms)项目并使用VS工具“添加数据源”可能会有所帮助。您可以在数据集设计器中查看VS如何生成命令等。

技巧2:还有其他可用选项,例如实体框架。数据集正在(成为)“生命终结”技术。

答案 1 :(得分:0)

非常感谢你的帮助。我实际上找到了问题的根源。我有多个数据库引用;我的项目中的一个和bin / debug中的另一个副本。我正在bin / debug中正确更新副本,但我正在查看项目中的副本。一旦我删除了所有副本,而不是bin / debug中的副本,这一切都有效并且有意义。现在我在bin / debug /

中看到数据库中的更新