我正在做一个小项目来学习如何使用DataSet
,但我遇到了一个小问题。请考虑以下代码:
foreach (DatabaseDataSet.ApplicationRow rowApplication in database.Application)
{
if (rowApplication.AID.ToString() == lblIDApplication.Text)
{
rowApplication.Date= tbApplicationDatum.Text;
rowApplication.Status = tbApplicationStatus.Text;
applicationAdapter.Update(rowApplication);
break;
}
}
我不知道为什么但是数据库没有得到更新。正在更新DataRow,因为当我再次调用数据时,我看到了新值。但是,当我重新运行我的应用程序时,它再次回到它的旧价值。有什么帮助吗?
编辑:我正在使用强类型DataSet
答案 0 :(得分:3)
您需要调用适配器的Update
方法来传播更改
AcceptChanges
仅更新行的内存更改,不会将这些更改迁移到数据库
MSDN AcceptChanges和RejectChanges仅适用于与DataRow相关的更改 (即添加,删除,删除和修改)。它们不适用于 架构或结构变化。
调用AcceptChanges不会将这些更改复制回 数据源是否使用DataAdapter填充DataSet。在那里面 情况,请改为调用更新 有关详细信息,请参阅Updating Data Sources with DataAdapters
答案 1 :(得分:2)
重要的是要记住,DataSet是数据的“本地副本”,而不是数据库的“实时链接”。例如,如果您的DataSet由IDataAdaptor(例如TableAdaptor)填充,则需要调用DataAdaptors Update方法传入Updated dataset以将结果同步回底层数据库。
此外我怀疑你不想做'新的ApplicationTableAdapter()',因为通常你想要用你填充的TableAdaptor更新,至少你需要确保你有正确的连接,查询等设置。
答案 2 :(得分:1)
解决方案:代码中没有任何问题。我在App.config中定义了两个ConnectionString。在删除之前有错误的数据库之后,我忘了删除第一个。删除第一个ConnectionString后,一切正常。