如何使用vb.net代码在SQL Server列中保存PDF文件

时间:2012-04-21 19:07:49

标签: sql-server vb.net

如何使用vb.net代码按内存流保存SQL Server列中的PDF文件?

2 个答案:

答案 0 :(得分: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());
    }
}

答案 1 :(得分:2)

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

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

IO.File.ReadAllBytes("C:\my.pdf")