我的功能有时会在数据库中插入数据,并且有时不会
我正在开发一个Web表单,我希望将与特定用户相关的文档上载到文件夹中,并在MySql中为相同的条目制作相应的条目服务器数据库现在,无论何时提交我的文档的详细信息,它都会上传文档,但有时会跳过数据库中的条目。我的功能有时会在数据库中插入数据,并且有时不会
代码段1
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
String path = Server.MapPath("~/AdminUploads/");
if (FileUpload1.HasFile)
{
Response.Write(FileUpload1.FileName);
try
{
FileUpload1.SaveAs(path + FileUpload1.FileName);
DOCUPLOADED doc = new DOCUPLOADED();
doc.DOCTYPE = Int32.Parse(DropDownList2.SelectedValue);
doc.DOCID = TextBox4.Text;
doc.FILEPATH = path + FileUpload1.FileName;
doc.FORUSER = Int64.Parse(TextBox5.Text);
doc.FILENAME = TextBox6.Text;
uploaddoc ud = new uploaddoc(doc);
if (ud.upload())
{
Response.Write("<script>alert('Addition succesfull');<script>");
}
else
{
Response.Write("<script>alert('Fatal error : addition unsuccesfull');</script>");
}
}
catch (Exception ex)
{
Response.Write("<script>alert('Error : File was not uploaded ');</script>");
}
}
码段2
public class uploaddoc
{
private DOCUPLOADED doc;
public uploaddoc(DOCUPLOADED doc)
{
this.doc = doc;
}
public bool upload()
{
if (doc != null)
{
dbcfDataContext dc = new dbcfDataContext();
dc.DOCUPLOADEDs.InsertOnSubmit(doc);
try
{
dc.SubmitChanges();
}
catch (Exception ex)
{
//
}
return true;
}
else
return false;
}
}
ID应该被自动增量,可以看到1-6是不存在,所以有9 10等
dbcfdatacontext
是通过创建完成的数据库连接一个dbml
文件并将其拖动到它上面。
我有固定的代码:
public class uploaddoc
{
private DOCUPLOADED doc;
public uploaddoc(DOCUPLOADED doc)
{
this.doc = doc;
}
public bool upload()
{
if (doc != null)
{
dbcfDataContext dc = new dbcfDataContext();
dc.DOCUPLOADEDs.InsertOnSubmit(doc);
//try
//{
dc.SubmitChanges();
//}
//catch (Exception ex)
//{
//
//}
return true;
}
else
return false;
}
}
但在所有的严重性,空的catch块的脚搬起石头砸自己的等价物。不要这样做。
'DataContext'是'IDisposable'的一个例外,规则。无论调用'.Dispose()'方法](http://softwareengineering.stackexchange.com/a/273705/24176),[DataContext'自己清理完毕。 –
@ SamAxe有趣!回答编辑。 –
谢谢@ SamAxe,我会在空的catch块上工作 –
为什么你忽略'upload'方法中的异常?这可能会为您提供有关错误发生原因的有用信息。 – Bebras
无论数据库更新或插入的结果如何,doc都不为null时,您将返回true。尝试在catch块上放置一个断点并放置“return false;”。 –
您正在使用反模式,我将其称为Try/Squelch。换句话说,你需要努力捕捉一个错误,然后只是盲目地继续下去,就好像没有错。这是可怕的做法。我猜你的ID列是一个身份?存在差距的原因是因为即使尝试失败,插入尝试也会增加标识值。如果它失败了,你无法知道你的代码。当然,在删除的情况下,差距是正常的和预期的。而当服务器重新启动时,你也会遇到问题。 –