0

我正在使用 LINQ 向我的部门表中添加一条新记录,这就是我所做的:

try
{
    dpt = new departement();
    dpt.departementcode = tbDepartementCode.Value;
    dpt.departementname = tbDepartementName.Value;
    dpt.createby = "hendra";
    dpt.createdate = DateTime.Now;
    dpt.updateby = "hendra";
    dpt.lastupdate = DateTime.Now;

    Linq.departements.InsertOnSubmit(dpt);
    Linq.SubmitChanges(); // error happen here, and could not catch it.

    Response.Redirect("Departement.aspx");
}
catch (ChangeConflictException ex)
{
    Console.WriteLine(ex.Message);
}

问题是,即使在使用后trycatch当我输入数据库中已经存在的记录时,仍然会出现错误屏幕。如何解决?有任何想法吗?一些例子会很棒。

4

3 回答 3

2

如果您尝试在 catch 块内再次提交您的更改,它可能会产生一个新的异常。您已经在其中的 catch 块中,捕获该新异常。要捕获新异常,您必须在 catch 中定义一个新的 try-catch。

编辑

由于问题已经改变,如果 catch 没有捕获内部抛出的Linq.SubmitChanges()异常,那么抛出的异常可能不是 type ChangeConflictException

于 2013-05-01T13:51:39.533 回答
1

当我输入数据库中已存在的记录时,仍然出现错误屏幕

因此,首先检查您的数据库是否存在数据,如果存在则更新旧数据,否则添加新数据。

try
{
    // Check Database first with your primary key, lets assume your check returned a
    // with dptcheck

    var dptcheck = from d in Linq.departments
                   where d.YourPrimaryKey == YourValue
                   select d;

    dpt = new departement();

    if (dptcheck.Any()) dpt = dptcheck.FirstOrDefault();

    dpt.departementcode = tbDepartementCode.Value;
    dpt.departementname = tbDepartementName.Value;
    dpt.createby = "hendra";
    dpt.createdate = DateTime.Now;
    dpt.updateby = "hendra";
    dpt.lastupdate = DateTime.Now;

    if (!dptcheck.Any()) Linq.departements.InsertOnSubmit(dpt); 
    // notice you only insert data if no old value found
    Linq.SubmitChanges();

    Response.Redirect("Departement.aspx");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
于 2013-05-01T14:31:52.110 回答
0

试试下面提到的代码,它可能会对你有所帮助。

 Context.SubmitChanges(Result =>
         {

             if (Result.HasError)
                 {
                 CallBack(Result.Error.ToString());
                 }
             else
                 {
                 CallBack("Done");
                 }
         }, null);
于 2013-05-01T14:07:24.167 回答