二进制图片、二进制pdf 简单的数据库和客户端的交互
本文讲述三点:
1.二进制图片 数据库和客户端的交互
2.二进制pdf 数据库和客户端的交互
3.一个简单的winform打开pdf的方案
前几天辞职了么事做 去书店看书 看到二进制图片上传觉得很简单
图片和pdf都可以显示到winfomr窗体 并且可以下载到本地
数据库中存image和pdf的字段都是 image类型的
1.二进制图片 数据库和客户端的交互(下载到本地参考pdf那个例子)
private void button1_Click(object sender, EventArgs e) { try { //网址不支持 只支持本地文件 string s = @"E:\MyCode\erjinzhi\erjinzhi\erjinzhi\image\youcai.jpg"; FileStream f = new FileStream(s, FileMode.Open, FileAccess.Read); BinaryReader b = new BinaryReader(f); byte[] byteImage = b.ReadBytes((int)f.Length); //保存到数据库中 SqlDbType.Image类型 SqlConnection conn = new SqlConnection("server=.;uid=sa;password=sa;database=test1"); SqlCommand com = new SqlCommand(); com.Connection = conn; com.CommandType = CommandType.Text; com.CommandText = "insert into [user] values(@byteImage)"; com.Parameters.Add("@byteImage", SqlDbType.Image).Value = byteImage; conn.Open(); int result=com.ExecuteNonQuery(); conn.Close(); if (result > 0) { com = new SqlCommand(); com.Connection = conn; com.CommandText = "select image from [user] where id=@id"; com.CommandType = CommandType.Text; com.Parameters.Add("@id", SqlDbType.Int).Value = 1; conn.Open(); object obj = com.ExecuteScalar(); conn.Close(); byteImage = (byte[])obj; MemoryStream m = new MemoryStream(byteImage); //给图片控件设置image pictureBox2.Image = Image.FromStream(m); } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
2.二进制PDF 数据库和客户端的交互(显示到界面参考下一个实例)
//可以下载到本地之后 把本地地址赋值给axAcroPDF1.src
private void button2_Click(object sender, EventArgs e) { try { //pdf如果大的话 你要把数据库超时时间设置大点 我尝试100M的pdf 结果超时错误 //pdf加密的话好像也会报错 没有试 string s = @"F:\桌面\firebug-Firefox_FireBug_调试技巧.pdf"; FileStream f = new FileStream(s, FileMode.Open, FileAccess.Read); BinaryReader b = new BinaryReader(f); byte[] bytePdf = b.ReadBytes((int)f.Length); //保存到数据库中 SqlDbType.Image类型 SqlConnection conn = new SqlConnection("server=.;uid=sa;password=sa;database=test1"); SqlCommand com = new SqlCommand(); com.Connection = conn; com.CommandType = CommandType.Text; com.CommandText = "insert into [user] values(@bytePdf)"; com.Parameters.Add("@bytePdf", SqlDbType.Image).Value = bytePdf; conn.Open(); int result = com.ExecuteNonQuery(); conn.Close(); if (result > 0) { com = new SqlCommand(); com.Connection = conn; com.CommandText = "select image from [user] where id=@id"; com.CommandType = CommandType.Text; com.Parameters.Add("@id", SqlDbType.Int).Value = 6; conn.Open(); object obj = com.ExecuteScalar(); conn.Close(); //pdf读取数据库中的二进制 然后报错到本地 //参考:http://topic.csdn.net/u/20080415/11/048deb7e-b0c2-4a20-94a5-88be74ce47f0.html bytePdf = (byte[])obj; string filepath = @"E:\xxx.pdf"; FileStream fs; if (File.Exists(filepath)) { fs = new FileStream(filepath, FileMode.Truncate); } else { fs = new FileStream(filepath, FileMode.CreateNew); } BinaryWriter br = new BinaryWriter(fs); br.Write(bytePdf, 0, bytePdf.Length); br.Close(); fs.Close(); Process.Start(filepath); } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
3.pdf显示到winform窗体的简单的方案
//在winform窗体中查看PDF // 打开工具箱 //右键 选择项 com组建选择adobe pdf reader //设置pdf地址src //http://dingxq.blog.163.com/blog/static/13052576120108805924575/ axAcroPDF1.src = @"E:\xxx.pdf";