【发布时间】:2017-04-04 19:24:46
【问题描述】:
我正在开发一个 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 文件并将表拖到该文件上完成的数据库连接。
【问题讨论】:
-
为什么忽略
upload方法中的异常?这可能会为您提供有关错误发生原因的有用信息。 -
无论数据库更新或插入的结果如何,当 doc 不为空时,您都将返回 true。尝试在 catch 块上放置一个断点并放置“return false;”。
-
您在这里使用了一种反模式,我称之为 Try/Squelch。换句话说,你努力捕捉错误,然后盲目地继续前进,就好像没有错一样。这是可怕的做法。我猜你的 ID 列是一个身份?存在间隙的原因是,即使尝试失败,当进行插入尝试时标识值也会增加。而且您无法在代码中知道它是否失败。当然,在删除的情况下,间隙是正常的和预期的。当服务器重新启动时,您也会得到间隙。
-
标签: c# asp.net sql-server linq