我从一个访问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();
答案 0 :(得分:1)
您的UPDATE语句不适用于Adapter.Update(),因为它需要参数并且必须与SELECT语句对齐。
您可以尝试直接执行该命令(没有适配器)或创建更好的更新语句(使用数据集设计器)。
更新
填写数据集后,
comm.ExecuteNonQuery()
技巧1:创建临时(WinForms)项目并使用VS工具“添加数据源”可能会有所帮助。您可以在数据集设计器中查看VS如何生成命令等。
技巧2:还有其他可用选项,例如实体框架。数据集正在(成为)“生命终结”技术。
答案 1 :(得分:0)
非常感谢你的帮助。我实际上找到了问题的根源。我有多个数据库引用;我的项目中的一个和bin / debug中的另一个副本。我正在bin / debug中正确更新副本,但我正在查看项目中的副本。一旦我删除了所有副本,而不是bin / debug中的副本,这一切都有效并且有意义。现在我在bin / debug /
中看到数据库中的更新