在asp.net中编辑表单时,从SQL数据库中检索保存的文件

时间:2018-07-19 16:08:02

标签: c# sql asp.net file-upload

我有一个表单,用户可以在其中捕获有关发票的信息。作为该表格的一部分,用户可以将该发票的pdf文件副本上传并保存到数据库中。

我正在使用相同的表格来保存新的发票并编辑已捕获的发票。

我的问题是,当用户编辑一个已经存在的发票并保存其更改时,pdf文件发票会被覆盖为空白。

我不确定如何解决此问题并检索已保存的pdf文件发票,以便在用户保存更改后,pdf文件发票不会被空白覆盖。

这是我到目前为止所拥有的:

public void PopulateForm()
{

    SqlConnection con = new SqlConnection(
    WebConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString);
    con.Open();
    SqlDataReader myReader = null;
    SqlCommand cmd = new SqlCommand("sp_displayVsoftInvoice", con);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("VSoftInvoiceID", txtID.Text);
    myReader = cmd.ExecuteReader();

    while (myReader.Read())
    {
        txtInvoiceNo.Text = (myReader["InvoiceNo"].ToString());
        ddlInvoiceType.SelectedValue = (myReader["EventTypeID"].ToString());
        txtDateSent.Text = (myReader["DateSent"].ToString());
        txtDatePaid.Text = (myReader["DatePaid"].ToString());
        string InvSent = (myReader["InvoiceSent"].ToString());
        string InvPaid = (myReader["InvoicePaid"].ToString());

        if (InvSent == "True")
        {
            cbxInvSent.Checked = true;
        }
        if (InvPaid == "True")
        {
            cbxInvPaid.Checked = true;
        }

    }
    con.Close();
}


protected void btnSaveInvoice_Click(object sender, EventArgs e)
    {
        string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
        string contentType = FileUpload1.PostedFile.ContentType;
        using (Stream fs = FileUpload1.PostedFile.InputStream)
        {
            using (BinaryReader br = new BinaryReader(fs))
            {
                byte[] bytes = br.ReadBytes((Int32)fs.Length);
                SqlConnection con = new SqlConnection(
                WebConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString);
                con.Open();
                SqlCommand cmd = new SqlCommand("sp_insertUpdateVsoftInvoice", con);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("VSoftInvoiceID", txtID.Text);
                cmd.Parameters.AddWithValue("CenterID", ddlCenter.SelectedItem.Value);
                cmd.Parameters.AddWithValue("InvoiceTypeID", ddlInvoiceType.SelectedItem.Value);
                cmd.Parameters.AddWithValue("InvoiceNo", txtInvoiceNo.Text);
                cmd.Parameters.AddWithValue("InvoiceSent", this.cbxInvSent.Checked ? "1" : "0");
                cmd.Parameters.AddWithValue("InvoicePaid", this.cbxInvPaid.Checked ? "1" : "0");
                cmd.Parameters.AddWithValue("DateSent", txtDateSent.Text);
                cmd.Parameters.AddWithValue("DatePaid", txtDatePaid.Text);
                cmd.Parameters.AddWithValue("InvoiceName", filename);
                cmd.Parameters.AddWithValue("ContentType", contentType);
                cmd.Parameters.AddWithValue("Data", bytes);
                cmd.Parameters.AddWithValue("ModifiedBy", txtUser.Text);
                cmd.Parameters.AddWithValue("DateModified", DateTime.Now);

                cmd.ExecuteNonQuery();
                con.Close();
                Response.Redirect("VsoftInvoice.aspx");
            }
        }
    }

请向我建议如何解决此问题,以使我已经保存的pdf发票不会被空白覆盖。 预先感谢!

1 个答案:

答案 0 :(得分:0)

我们需要澄清以下两件事之一: 1-编辑而不上传文档时会发生这种情况吗?如果是,那么我认为您仅在上传文件后才需要保存文件(修改btnSaveInvoice_Click方法) 2-如果还有其他编辑方法,请共享代码 祝你好运。