Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ'处理异常;s提交更改方法?_C#_Asp.net_Linq_Exception - Fatal编程技术网

C# 如何使用LINQ'处理异常;s提交更改方法?

C# 如何使用LINQ'处理异常;s提交更改方法?,c#,asp.net,linq,exception,C#,Asp.net,Linq,Exception,我正在使用LINQ将一条新记录添加到我的部门表中,我的工作如下: try { dpt = new departement(); dpt.departementcode = tbDepartementCode.Value; dpt.departementname = tbDepartementName.Value; dpt.createby = "hendra"; dpt.createdate = DateTime.Now; dpt.updateby

我正在使用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);
}

问题是,即使使用了
try
catch
之后,当我输入数据库中已经存在的记录时,仍然会出现错误屏幕。如何修复它?有什么想法吗?举个例子就好了。

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

编辑


由于问题已更改,如果捕获未捕获在
Linq.SubmitChanges()
中引发的异常,则引发的异常可能不是
ChangeConflictException
类型

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

编辑


由于问题已更改,如果捕获未捕获在
Linq.SubmitChanges()
中引发的异常,则引发的异常可能不是
ChangeConflictException
类型

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

 Context.SubmitChanges(Result =>
         {

             if (Result.HasError)
                 {
                 CallBack(Result.Error.ToString());
                 }
             else
                 {
                 CallBack("Done");
                 }
         }, null);

尝试下面提到的代码,它可能会帮助你

 Context.SubmitChanges(Result =>
         {

             if (Result.HasError)
                 {
                 CallBack(Result.Error.ToString());
                 }
             else
                 {
                 CallBack("Done");
                 }
         }, null);
当我输入数据库中已经存在的记录时,仍然会出现一个错误屏幕

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

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);
}
当我输入数据库中已经存在的记录时,仍然会出现一个错误屏幕

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

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);
}

//进行一些调整
代码修复问题。如果在那里发生异常,它将不会递归到
catch
中并处理它。您收到的完整异常是什么?您能否向我们展示(1)整个异常,包括类型和stacktrace,以及(2)整个方法(因为在上一个示例中,您有更多的catch块,现在我只看到一个)用
//进行一些调整
代码修复问题。如果在那里发生异常,它将不会递归到
catch
中并处理它。您收到的完整异常是什么?您能否向我们展示(1)整个异常,包括类型和stacktrace,以及(2)整个方法(因为在上一个示例中,您有更多的catch块,现在我只看到一个)。问题是,此代码之后发生错误:Linq.departments.InsertOnSubmit(dpt);Linq.SubmitChanges();然后发生了另一个例外,而不是你正在捕获的例外。我编辑了我的帖子,在错误发生的地方做了标记,有没有办法解决这个问题?顺便说一句,我尝试使用catch-general-exception,但它也不起作用。您是否放置了一个断点以确保它不会进入catch块?不,它现在起作用了,我使用general-exception来捕获它,不管怎样,thx everyone。问题是,错误发生在以下代码之后:Linq.departments.InsertOnSubmit(dpt);Linq.SubmitChanges();然后发生了另一个例外,而不是你正在捕获的例外。我编辑了我的帖子,在错误发生的地方做了标记,有没有办法解决这个问题?顺便说一句,我尝试使用catch-general-exception,但它也不起作用。您是否放置了断点以确保它没有进入catch块?不,它现在起作用了,我使用general-exception来捕获它,无论如何,thx everyone。这不可编译:方法“SubmitChanges”的重载不接受2个参数这不可编译:方法“SubmitChanges”的重载不接受2个参数