【问题标题】:Linq C# struggling with update codeLinq C# 努力更新代码
【发布时间】:2014-01-14 14:01:03
【问题描述】:

如果有人能向我解释这有什么问题,我会非常感激,因为它没有抛出异常,所以我看不出它为什么不更新记录。

对不起,我应该说我正在尝试更新数据库中的现有记录,“CompName”被用作主键,这不是我的数据库设计或应用程序,或者我会使用 int 作为 id 和编码的东西大不相同。

using (CompanyAndContactDataContext dc = new CompanyAndContactDataContext())
{                
    try {
        Company c = (from datavalue in dc.Companies
            where datavalue.CompanyName == CompName
            select datavalue).First();

        c.CompanyName = txtEditCompanyName.Text;
        c.CompanyEmailAddress = txtEditCompanyEmail.Text;
        c.CompanyTelephoneNumber = txtEditCompanyTelephone.Text;
        c.CompanyFaxNumber = txtEditCompanyFax.Text;
        c.CompanyAddress1 = txtEditAddress1.Text;
        c.CompanyAddress2 = txtEditAddress2.Text;
        c.CompanyAddress3 = txtEditAddress3.Text;
        c.CompanyAddress4 = txtEditAddress4.Text;
        c.PostCode = txtEditPostcode.Text;

        dc.SubmitChanges();
    } catch (Exception exep) {

    }
}

【问题讨论】:

  • 去掉try catch就可以看到了。
  • 抱歉,我忘了在问题上添加一个消息框...让我再看一遍:(
  • 永远不要有一个空的catch!至少记录错误 - 在这种情况下,它肯定会帮助您找到错误。
  • 是的,永远不要捕获异常,除非你打算用它做点什么(重新抛出不算)。另外,请尝试 FirstOrDefault() 而不是 First,除非您确定会有一个匹配条目
  • @Sam 如果你完全删除了catch,并且实际上有一个异常被抛出,Visual Studio 将在这一行停止,你可以使用它来查看异常的详细信息。比将它放入代码中的消息框并尝试以这种方式解决它要容易得多!

标签: c# .net sql-server wpf linq


【解决方案1】:

乍一看,可能是 First() 调用引发了异常。您可以将其设为 FirstOrDefault,或尝试将 Id 传递给您的方法(让他们从下拉列表或自动完成中选择一个值,然后获取他们选择的 Id)。这样您就可以确定当此代码命中时您可以更新条目。 如果您将 Id 传递给方法,您甚至可以使用“Single”或“SingleOrDefault”

编辑:

假设您输入“MyCompany”作为 CompName,而这在数据库表中不存在。如果你调用 First() 它会抛出一个异常。如果您调用 FirstOrDefault(),它将返回 "c" 作为 null。

如果您调用“c.CompanyName”或其他任何带点的名称,它将返回异常。

在调用任何点方法之前,您需要检查 c 是否为空。

【讨论】:

  • SingleOrDefault 有效,但我现在尝试更改的值出现空引用错误。
  • @Sam 如果你给它一个主键或 ID,只使用 SingleOrDefault。否则为 FirstOrDefault。您收到空引用错误,因为默认值为空。您需要添加一些代码来检查“c”是否为空,向用户返回一条消息,说明他们为 CompName 输入的内容不在数据库中
猜你喜欢
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多