Linq C#正在努力应对更新代码

时间:2014-01-14 14:01:04

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

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

很抱歉我应该说我正在尝试更新数据库中的现有记录,“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) {

    }
}

1 个答案:

答案 0 :(得分:0)

首先猜测,它可能是抛出异常的First()调用。您可以将其设为FirstOrDefault,或尝试将Id传递给您的方法(让他们从下拉列表中选择一个值或自动完成,然后获取他们所选内容的ID)。这样,您可以确定此代码何时命中,您可以更新条目。 如果您将Id传递给方法,您甚至可以使用“Single”或“SingleOrDefault”

编辑:

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

如果您使用点调用“c.CompanyName”或其他任何内容,则会返回异常。

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