如何使用vb.net代码按内存流保存SQL Server列中的PDF文件?
答案 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")