1

如何使用 vb.net 代码通过内存流将 PDF 文件保存在 SQL Server 列中?

4

2 回答 2

5

谢谢你!!!我现在的解决方案是:

public void SaveFile()
{
    //Try
    OpenFileDialog fd = new OpenFileDialog();
    fd.Filter = "pdf file|*.pdf";
    if (fd.ShowDialog == System.Windows.Forms.DialogResult.OK) {
        //PdfDocument1.FilePath = fd.FileName


        byte[] filebyte = null;
        SqlConnection con = new SqlConnection("Data Source=LOCALHOS-A4AE79\\LOCALHOST1;Initial Catalog=library_alborz;Integrated Security=True");


        SqlCommand cmd = default(SqlCommand);

        filebyte = System.IO.File.ReadAllBytes(fd.FileName);


        cmd = new SqlCommand("Insert into pdftbl ( pdffld ) Values(@pdf)", con);
        //cmd.Parameters.Add("@filepath", SqlType.VarChar).Value = txtfilepath.Text
        cmd.Parameters.Add("@pdf", SqlDbType.Binary).Value = filebyte;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
        Interaction.MsgBox("File saved into database", MsgBoxStyle.Information);
        //Catch ex As Exception
        //    MsgBox(Err.Description, MsgBoxStyle.Exclamation)
        //End Try

    }
}


------------
// load pdf file

private void Button2_Click(System.Object sender, System.EventArgs e)
{
    string strsql = null;
    SqlConnection con = new SqlConnection("Data Source=LOCALHOS-A4AE79\\LOCALHOST1;Initial Catalog=library_alborz;Integrated Security=True");
    SqlDataAdapter da = new SqlDataAdapter();
    DataSet ds = new DataSet();

    try {
        strsql = "select pdffld from  pdftbl ";
        da = new SqlDataAdapter(strsql, con);
        da.Fill(ds, "tbl");

        //Get image data from gridview column.
        byte[] pdfData = Convert.ToByte(ds.Tables["tbl"].Rows[0][0]);

        //Initialize pdf  variable

        //Read pdf  data into a memory stream
        using (MemoryStream ms = new MemoryStream(pdfData, 0, pdfData.Length)) {
            ms.Write(pdfData, 0, pdfData.Length);

            //Set pdf variable value using memory stream.
            PdfDocument1.Load(ms);
            PdfPageView1.Document = PdfDocument1;
            PdfPageView1.Refresh();

        }


    } catch (Exception ex) {
        MessageBox.Show(ex.ToString());
    }
}
于 2012-04-25T06:06:17.443 回答
3

首先,您的数据库表中必须有类型为 varbinary(MAX) 的列。它允许您在其中保存字节数组。

接下来,您可以使用这样的代码行将 PDF 文件的内容作为字节数组获取:

IO.File.ReadAllBytes("C:\my.pdf")
于 2012-04-21T19:16:17.000 回答