我的功能有时会在数据库中插入数据,并且有时不会

问题描述:

我正在开发一个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等

ID is supposed to be autoincremented,you can see 1-6 are absent,so are 9 10 etc

dbcfdatacontext是通过创建完成的数据库连接一个dbml文件并将其拖动到它上面。

+3

为什么你忽略'upload'方法中的异常?这可能会为您提供有关错误发生原因的有用信息。 – Bebras

+0

无论数据库更新或插入的结果如何,doc都不为null时,您将返回true。尝试在catch块上放置一个断点并放置“return false;”。 –

+0

您正在使用反模式,我将其称为Try/Squelch。换句话说,你需要努力捕捉一个错误,然后只是盲目地继续下去,就好像没有错。这是可怕的做法。我猜你的ID列是一个身份?存在差距的原因是因为即使尝试失败,插入尝试也会增加标识值。如果它失败了,你无法知道你的代码。当然,在删除的情况下,差距是正常的和预期的。而当服务器重新启动时,你也会遇到问题。 –

我有固定的代码:

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块的脚搬起石头砸自己的等价物。不要这样做。

+0

'DataContext'是'IDisposable'的一个例外,规则。无论调用'.Dispose()'方法](http://softwareengineering.stackexchange.com/a/273705/24176),[DataContext'自己清理完毕。 –

+0

@ SamAxe有趣!回答编辑。 –

+0

谢谢@ SamAxe,我会在空的catch块上工作 –