c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库

///c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库 闲话不多说,直接上代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;
using System.Data.OleDb;

namespace ImageSaveOracleBlobDataBase
{
	public partial class Form1 : Form
	{
		/// <summary> 
		/// 作者:黑色头发
		/// C# WinForm操作oracle数据库的Blob字段
		/// blog:http://heisetoufa.iteye.com
		/// 静网:http://www.heisetoufa.cn
		/// </summary> 

		public Form1()
		{
			InitializeComponent();
		}

		#region 保存图片到oracle数据库

		private void button1_Click(object sender, EventArgs e)
		{
			string cnnstr = "provider=OraOLEDB.Oracle;data source=zlkj_kk;User Id=kk;Password=kk;";
			OleDbConnection con = new OleDbConnection(cnnstr);
			try
			{
				con.Open();
			}
			catch
			{ }
			OleDbCommand cmd = new OleDbCommand(cnnstr, con);

			cmd.CommandType = CommandType.Text;
			cmd.CommandText = cnnstr;

			string imgPath = @"d:\aa\a.jpg";//图片文件所在路径
			FileStream file = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
			Byte[] imgByte = new Byte[file.Length];//把图片转成 Byte型 二进制流
			file.Read(imgByte, 0, imgByte.Length);//把二进制流读入缓冲区
			file.Close();


			cmd.CommandText = " insert into kk.kkzp ( xh,zp ) values ('17',:zp) ";//正常sql语句插入数据库

			cmd.Parameters.Add("zp", System.Data.OleDb.OleDbType.Binary, imgByte.Length);
			cmd.Parameters[0].Value = imgByte;

			try
			{
				cmd.ExecuteNonQuery();
				MessageBox.Show("插入成功");
			}
			catch (System.Exception e1)
			{
				MessageBox.Show(e1.Message);
			}
		}

		#endregion


		#region 修改图片

		private void button2_Click(object sender, EventArgs e)
		{
			string cnnstr = "provider=OraOLEDB.Oracle;data source=zlkj_kk;User Id=kk;Password=kk;";
			OleDbConnection con = new OleDbConnection(cnnstr);

			string imgPath = @"d:\aa\b.jpg";//图片文件所在路径
			FileStream file = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
			Byte[] ddd = new Byte[file.Length];//把图片转成 Byte型 二进制流
			file.Read(ddd, 0, ddd.Length);//把二进制流读入缓冲区
			file.Close();


			string strSQL = "update kk.kkzp set zp=:zp where xh = '16' ";
			try
			{
				con.Open();
			}
			catch
			{ }
			OleDbCommand cmd = new OleDbCommand(cnnstr, con);

			cmd.CommandType = CommandType.Text;
			cmd.CommandText = strSQL;
			cmd.Parameters.Add("zp", System.Data.OleDb.OleDbType.Binary, ddd.Length).Value = ddd;
			cmd.ExecuteNonQuery();
			MessageBox.Show("修改成功");
		}

		#endregion


		#region 读出数据库里图片

		private void button3_Click(object sender, EventArgs e)
		{
			string strSQL = "select xh,zp from kk.kkzp where xh = 16 ";
			string cnnstr = "provider=OraOLEDB.Oracle;data source=zlkj_kk;User Id=kk;Password=kk;";
			OleDbConnection con = new OleDbConnection(cnnstr);
			try
			{
				con.Open();
			}
			catch
			{ }
			OleDbCommand cmd = new OleDbCommand(strSQL, con);
			System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader();
			while (dr.Read())
			{
				if (dr["zp"] != DBNull.Value)//照片字段里有值才能进到方法体显示图片,否则清空pb   
				{
					MemoryStream ms = new MemoryStream((byte[])dr["zp"]);//把照片读到MemoryStream里   
					Image imageBlob = Image.FromStream(ms, true);//用流创建Image   
					pictureBox1.Image = imageBlob;//输出图片   
					pictureBox1.Image.Save("d:\\abcc.jpg", pictureBox1.Image.RawFormat);
				}
				else//照片字段里没值,清空pb   
				{
					pictureBox1.Image = null;
				}   
			}
		}

		#endregion


		#region 使文本编辑变得可见

		private void button4_Click(object sender, EventArgs e)
		{
			textBox1.Visible = true;
			button5.Visible = true;
			button6.Visible = true;
			button7.Visible = true;
		}

		#endregion

		#region 保存文本

		private void button5_Click(object sender, EventArgs e)
		{
			string cnnstr = "provider=OraOLEDB.Oracle;data source=zlkj_kk;User Id=kk;Password=kk;";
			OleDbConnection con = new OleDbConnection(cnnstr);
			try
			{
				con.Open();
			}
			catch
			{ }
			OleDbCommand cmd = new OleDbCommand(cnnstr, con);

			cmd.CommandType = CommandType.Text;
			cmd.CommandText = cnnstr;

			string txvalue = this.textBox1.Text.Trim();

			//将textBox1.Text转换为二进制类型
			byte[] expbyte = System.Text.Encoding.Unicode.GetBytes(txvalue);

			cmd.CommandText = " insert into kk.kkzp ( xh,zp ) values ('18',:zp) ";

			cmd.Parameters.Add("zp", System.Data.OleDb.OleDbType.Binary, expbyte.Length);
			cmd.Parameters[0].Value = expbyte;

			try
			{
				cmd.ExecuteNonQuery();
				MessageBox.Show("插入结束");
			}
			catch (System.Exception e1)
			{
				MessageBox.Show(e1.Message);
			}
		}

		#endregion


		#region 修改文本

		private void button6_Click(object sender, EventArgs e)
		{
			string cnnstr = "provider=OraOLEDB.Oracle;data source=zlkj_kk;User Id=kk;Password=kk;";
			OleDbConnection con = new OleDbConnection(cnnstr);

			byte[] ddd;
			ddd = System.Text.Encoding.Unicode.GetBytes(this.textBox1.Text);
			string strSQL = "update kk.kkzp set zp=:zp where xh = 18 ";
			try
			{
				con.Open();
			}
			catch
			{ }
			OleDbCommand cmd = new OleDbCommand(cnnstr, con);

			cmd.CommandType = CommandType.Text;
			cmd.CommandText = strSQL;
			cmd.Parameters.Add("zp", System.Data.OleDb.OleDbType.Binary, ddd.Length).Value = ddd;
			cmd.ExecuteNonQuery();
			MessageBox.Show("OK!");
		}

		#endregion

		
		#region 读出文本

		private void button7_Click(object sender, EventArgs e)
		{
			string strSQL = "select xh,zp from kk.kkzp where xh = 18 ";
			string cnnstr = "provider=OraOLEDB.Oracle;data source=zlkj_kk;User Id=kk;Password=kk;";
			OleDbConnection con = new OleDbConnection(cnnstr);
			try
			{
				con.Open();
			}
			catch
			{ }
			OleDbCommand cmd = new OleDbCommand(strSQL, con);
			System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader();
			while (dr.Read())
			{

				//读取BLOB数据时也要将其转换回文本类型
				string dd = dr["zp"].ToString();
				byte[] ooo = (byte[])dr["zp"];
				string str;
				str = System.Text.Encoding.Unicode.GetString(ooo);
				this.textBox1.Text = str;
			}
		}

		#endregion


		#region 退出

		private void button8_Click(object sender, EventArgs e)
		{
			Application.Exit();
		}

		#endregion


		#region 单击状态栏

		private void toolStripStatusLabel2_Click(object sender, EventArgs e)
		{
			System.Diagnostics.Process.Start("http://heisetoufa.iteye.com");
		}

		#endregion
	}
}

  

 

效果图

posted @ 2017-05-25 17:23  FelixWang  阅读(1383)  评论(0编辑  收藏  举报