【发布时间】:2012-04-11 14:29:50
【问题描述】:
我正在使用自定义存储过程从我的数据库中检索数据:
tbTextBox.Text = db.getSettingValue("PropertyName").First().Value;
(db是一个全局的DataClasses对象,在FormLoad事件中初始化)
这部分工作完全正常,并且循环重复(定时器间隔 30 秒)
如果用户更改文本框的值,将触发以下代码:
private void tbTextBox_TextChanged(object sender, EventArgs e)
{
if (tbTextBox.Text != db.getSettingValue("PropertyName").First().Value)
{
db.Settings.Where(n => n.Name == "PropertyName").First().Value = tbTextBox.Text;
db.SubmitChanges();
}
}
如果我在 submitChanges 之前创建对象并更改其值 - 结果相同。我已经调试过了,它不像它永远不会通过我的 IF 语句;)
为什么它不起作用?没有例外...如果我使用 SQL Server Management Studio 查询设置表,数据库中没有任何变化。
EDIT1:
db.Settings.Where(n => n.Name == "AvailablePeriods").First().Value = tbPeriods.Text;
var a = db.Settings.Where(n => n.Name == "AvailablePeriods");
var b = a.First();
var c = b.Value;
b.Value = tbPeriods.Text;
var d = db.GetChangeSet();
db.SubmitChanges();
为了正确调试,我已将代码分成更小的步骤。一切正常,但是... Changeset 不返回任何更新。对于下一步,我将尝试按照建议使用“附加”。
EDIT2: 添加PK解决了这个问题。现在一切都像魅力一样。
经验教训 - 我不应该太相信自己 :)
【问题讨论】:
-
datacontext 日志说什么?
-
'这就像它永远不会通过我的 IF 语句' - 您是否已调试并确认事件处理程序正在执行,以及是否正在评估条件?
-
这不像...错字 - 抱歉
-
如果生成的SQL没有更新,尝试使用dataContext上的Attach()方法更新字段
-
附加是显示实际异常的关键——甚至没有记录:/我以为我在这个表中有主键,我错了。附加返回的未暂停异常,其中包含以下消息“无法对'表(设置)'执行创建、更新或删除操作,因为它没有主键。”我会修改表格,看看情况如何......