【问题标题】:Why SubmitChanges doesn't work?为什么 SubmitChanges 不起作用?
【发布时间】: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()方法更新字段
  • 附加是显示实际异常的关键——甚至没有记录:/我以为我在这个表中有主键,我错了。附加返回的未暂停异常,其中包含以下消息“无法对'表(设置)'执行创建、更新或删除操作,因为它没有主键。”我会修改表格,看看情况如何......

标签: c# sql winforms linq


【解决方案1】:

直接更新数据上下文的数据不是更新表的方法。如果数据已存在则使用Attach Method,如果不存在则使用 InsertOnSumit

【讨论】:

    【解决方案2】:

    这条记录:

    db.getSettingValue("PropertyName").First()
    

    可能和这条记录不一样:

    db.Settings.Where(n => n.Name == "PropertyName").First()
    

    您在没有指定顺序的情况下调用 First - 因此数据库可以进行选择,而不必始终如一地选择。


    您应该减少一行代码,以便在单步执行代码时获得更多信息。


    循环重复(定时器间隔 30 秒)

    这是在不同的线程上吗? tbTextBox.Text 的值在执行 if-criteria 和 if-block 之间是否发生了变化?

    【讨论】:

    • 两条记录是一样的,因为这个表只有2行。而且第一列是唯一的,所以我以后不会弄错了。
    • 我使用 First(),只是为了告诉调试器/编译器这是一个对象,所以我可以得到 VALUE :)
    • 已测试 - 计时器不会影响任何事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2013-03-07
    • 2019-08-06
    相关资源
    最近更新 更多