【问题标题】:My function inserts data into the DB at times and doesn't at times我的函数有时会将数据插入数据库,有时不会
【发布时间】: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


【解决方案1】:

我已经修复了你的代码:

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

但说真的,空接球就相当于朝自己的脚开枪。不要那样做。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多