我正在使用LINQ向我的department表添加一条新记录,这就是我所做的:
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
之后,当我输入数据库中已存在的记录时,仍会出现错误屏幕。怎么解决?有任何想法吗?一些例子会很棒。
答案 0 :(得分:2)
如果您尝试在catch块中再次提交更改,则可能会产生新的异常。你已经在的catch块,捕获新的异常。对于要捕获的新异常,您必须在catch中定义一个新的try-catch。
修改强>
由于问题已更改,如果catch没有捕获Linq.SubmitChanges()
内引发的异常,则抛出的异常可能不是ChangeConflictException
类型。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
尝试下面提到的代码,它可以帮助你。
Context.SubmitChanges(Result =>
{
if (Result.HasError)
{
CallBack(Result.Error.ToString());
}
else
{
CallBack("Done");
}
}, null);