保存图象到Sql Server,并且读取显示

现有图象数据表

None.gif CREATE TABLE [ENTR_Image] (
None.gif    [EIGuid] [nvarchar] (
50 ) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF__ENTR_Imag__EIGui__2C3F4C1F] DEFAULT (newid()),
None.gif    [EImage] [image] NOT NULL CONSTRAINT [DF__ENTR_Imag__EImag__2D337058] DEFAULT (
'' ),
None.gif    [VImage] [image] NOT NULL CONSTRAINT [DF__ENTR_Imag__VImag__2E279491] DEFAULT (
'' ),
None.gif    [OperationTime] [datetime] NOT NULL CONSTRAINT [DF__ENTR_Imag__Opera__2F1BB8CA] DEFAULT (getdate()),
None.gif     PRIMARY KEY  CLUSTERED 
None.gif    (
None.gif        [EIGuid]
None.gif    )  ON [PRIMARY] 
None.gif) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
None.gifGO
None.gif
需要把指定的图片添加到数据库里面
打开图片到picturebox里面
None.gif private   void  button1_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            OpenFileDialog oFileDialog1 
= new OpenFileDialog();
InBlock.gif            oFileDialog1.InitialDirectory 
= "c:\\" ;
InBlock.gif            oFileDialog1.Filter 
="Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
InBlock.gif            oFileDialog1.FilterIndex 
= 1 ;
InBlock.gif            oFileDialog1.RestoreDirectory 
= true ;
InBlock.gif            
if(oFileDialog1.ShowDialog() == DialogResult.OK)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if(oFileDialog1.FileName != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
if (pictureBox1.Image!=null)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
//MessageBox.Show("OK");
InBlock.gif
                        label4.Text=oFileDialog1.FileName; 
InBlock.gif                        pictureBox2.Image
=Image.FromFile(oFileDialog1.FileName);
InBlock.gif                        
return;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    label3.Text
=oFileDialog1.FileName; 
InBlock.gif                    
//textBox1.Text=oFileDialog1.FileName; 
InBlock.gif
                    pictureBox1.Image=Image.FromFile(oFileDialog1.FileName);
InBlock.gif                
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

保存图象到数据表
None.gif private   void  button2_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
//保存
InBlock.gif
            string filename =label3.Text;
InBlock.gif            
byte [] content = ImageToStream(filename);
InBlock.gif            
InBlock.gif            
string filename1 =label4.Text;
InBlock.gif            
byte [] content1 = ImageToStream(filename1);
InBlock.gif
InBlock.gif            StoreImage(content,content1);
ExpandedBlockEnd.gif        }

其中用到如下方法:把指定文件名的图片转化为二进制流byte[]

 

None.gif private byte []  ImageToStream(string fileName)
None.gif        {
None.gif            Bitmap image 
=  new Bitmap(fileName) ;
None.gif
            MemoryStream stream  =  new MemoryStream() ;
None.gif
            image.Save(stream ,  System.Drawing.Imaging.ImageFormat.Bmp) ;
None.gif
            return stream.ToArray() ;
None.gif
        }
None.gif

保存byte[]到数据表
None.gif private void StoreImage(byte []  content , byte []  connect1)
None.gif        {
None.gif//            if (MainForm.conn.State.Equals(ConnectionState.Closed)) 
None.gif//                MainForm.conn.Open()
;
None.gif
            string str_Conn = " server=SERVER-DBT;database=LogERP;uid=logerp;pwd=logerpok;Max Pool Size=20000; " ;
None.gif
            
None.gif            try
None.gif            {
None.gif                SqlConnection sqlconn
= new SqlConnection(str_Conn) ;
None.gif
                sqlconn.Open() ;
None.gif
               
None.gif                SqlCommand insert 
=  new SqlCommand( " Insert into ENTR_Image(EImage,VImage) values (@EImage,@VImage) " ) ;
None.gif
                insert.Connection = sqlconn ;
None.gif
                SqlParameter imageParameter  =  
None.gif                    insert.Parameters.Add(
" @EImage " ,  SqlDbType.Binary) ;
None.gif
                imageParameter.Value  =  content ;
None.gif
                imageParameter.Size   =  content.Length ;
None.gif

None.gif                SqlParameter imageParameter1 
=  
None.gif                    insert.Parameters.Add(
" @VImage " ,  SqlDbType.Binary) ;
None.gif
                imageParameter1.Value  =  connect1 ;
None.gif
                imageParameter1.Size   =  connect1.Length ;
None.gif
                
None.gif
None.gif                int i
= insert.ExecuteNonQuery() ;                 
None.gif
                sqlconn.Close() ;
None.gif
                MessageBox.Show(i.ToString()) ;
None.gif

None.gif            }
None.gif            catch(Exception ex)
None.gif            {
None.gif                MessageBox.Show(ex.Message.ToString())
;
None.gif
                MessageBox.Show(ex.StackTrace.ToString ()) ;  
None.gif
            }
None.gif            finally
None.gif            {
None.gif//                MainForm.conn.Close()
;
None.gif
            }
None.gif        } 

新增以后,根据guid查询图像
None.gif private string str_Guid ;
None.gif
        public string str_ImageGuid
None.gif        {
None.gif            set
None.gif            {
None.gif                str_Guid
= value ;
None.gif
            }
None.gif        }

None.gif  private void ReadImage()
None.gif        {
None.gif            string str_Conn
= " server=172.17.100.132;database=Northwind;uid=sa;pwd=19791225;Max Pool Size=20000; " ;
None.gif
            try
None.gif            {
None.gif                //根据GUID读取图片
None.gif                SqlConnection sqlconn
= new SqlConnection(str_Conn) ;
None.gif
                sqlconn.Open() ;
None.gif
                string str_Sql = " select EImage from ENTR_Image where EIGuid=' " +str_Guid+ " ' " ;
None.gif
                SqlCommand cmd = new SqlCommand(str_Sql) ;
None.gif
                cmd.Connection = sqlconn ;
None.gif
                byte  []  content  =  (byte []  )cmd.ExecuteScalar() ;
None.gif
                try
None.gif                {
None.gif                    MemoryStream stream 
=  new MemoryStream(content) ;
None.gif
                    pictureBox1.Image =  Image.FromStream(stream) ;  
None.gif
                }
None.gif                catch
None.gif                {
None.gif
None.gif                }
None.gif
None.gif
None.gif                str_Sql
= " select VImage from ENTR_Image where EIGuid=' " +str_Guid+ " ' " ;
None.gif
                cmd = new SqlCommand(str_Sql) ;
None.gif
                cmd.Connection = sqlconn ;
None.gif
                content  =  (byte []  )cmd.ExecuteScalar() ;
None.gif
                try
None.gif                {
None.gif                    MemoryStream stream 
=  new MemoryStream(content) ;
None.gif
                    pictureBox2.Image =  Image.FromStream(stream) ;  
None.gif
                }
None.gif                catch
None.gif                {
None.gif                }
None.gif                sqlconn.Close()
;
None.gif
                
None.gif            }
None.gif            catch (Exception ex)
None.gif            {
None.gif                MessageBox.Show(ex.Message.ToString())
;
None.gif
                MessageBox.Show(ex.StackTrace.ToString ()) ;  
None.gif
            }
None.gif        }

byte[]的初始化
ExpandedBlockStart.gif ContractedBlock.gif byte [] byt = dot.gif {} ;
None.gif            ClassEnt_rsDrawing.Browser
= byt;

现在如果转换过来
把sql里面的image字段的内容读入文件
代码如下:
ExpandedBlockStart.gif ContractedBlock.gif   /**/ /**/ /**/ /// <summary>
InBlock.gif        
/// 根据2进制数组获得文件
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="byt">2进制数据</param>
ExpandedBlockEnd.gif        
/// <param name="str_Filename">目标文件</param>

None.gif          private   void  GetFileFromDataBase( byte [] byt, string  str_Filename)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
//MemoryStream stream = new MemoryStream(byt);
InBlock.gif
            FileStream fs_stream=new FileStream(str_Filename,FileMode.CreateNew);
InBlock.gif            BinaryWriter writefile 
= new BinaryWriter(fs_stream);
InBlock.gif            writefile.Write(byt);
InBlock.gif            writefile.Close();            
ExpandedBlockEnd.gif        }

None.gif

辅助代码,保存对话框
ExpandedBlockStart.gif ContractedBlock.gif    /**/ /**/ /**/ /// <summary>
InBlock.gif        
/// 另存为 保存文件对话框
InBlock.gif        
/// </summary>
ExpandedBlockEnd.gif        
/// <returns></returns>

None.gif          private   string  fun_savefilename()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
string savefilename="";
InBlock.gif            SaveFileDialog saveFileDialog1 
= new SaveFileDialog(); 
InBlock.gif            saveFileDialog1.Filter 
= "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*"  ;
InBlock.gif            
InBlock.gif            saveFileDialog1.FilterIndex 
= 1 ;
InBlock.gif            saveFileDialog1.RestoreDirectory 
= true ;
InBlock.gif            
InBlock.gif            
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                savefilename
=saveFileDialog1.FileName;                 
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return savefilename;
ExpandedBlockEnd.gif        }

把数据库里的image读取到byte[]里,代码
这里browser是image类型
None.gif public   byte [] GetImage( string  str_Guid)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif            
byte[] byt=dot.gif{};
InBlock.gif            StringBuilder strSql
=new StringBuilder();
InBlock.gif            strSql.Append(
"select Browser from rsDrawing ");
InBlock.gif            
if(str_Guid.Trim()!="")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                strSql.Append(
" where Guid='"+str_Guid+"'");
ExpandedSubBlockEnd.gif            }

InBlock.gif            byt
=DataBase.GetByteImage(strSql.ToString());            
InBlock.gif            
return byt;
ExpandedBlockEnd.gif        }

None.gif
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif    
/**/ /**/ /**/ /// <summary>
InBlock.gif        
/// 根据Sql(完整)语句,获得Byte[]图片信息
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="str_Sql">SQL语句</param>
ExpandedBlockEnd.gif        
/// <returns>二进制流</returns>

None.gif          public   static   byte [] GetByteImage( string  str_Sql)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {            
InBlock.gif            
string connectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"].ToString();
ExpandedSubBlockStart.gifContractedSubBlock.gif            
byte [] content=dot.gif{};
InBlock.gif            SqlConnection sqlconn
=new SqlConnection(connectionString);
InBlock.gif            sqlconn.Open();            
InBlock.gif            SqlCommand cmd
=new SqlCommand(str_Sql);
InBlock.gif            cmd.Connection
=sqlconn;
InBlock.gif            content 
= (byte[] )cmd.ExecuteScalar();
InBlock.gif            sqlconn.Close();
InBlock.gif            
return content;
ExpandedBlockEnd.gif        }

显示 byte[]到form里面
ExpandedBlockStart.gif ContractedBlock.gif   /**/ /**/ /**/ /// <summary>
InBlock.gif        
/// 显示图象到窗体
InBlock.gif        
/// </summary>
ExpandedBlockEnd.gif        
/// <param name="byt_Image"></param>

None.gif          private   void  ImageLoad( byte [] byt_Image)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            DevExpress.XtraEditors.PictureEdit pb 
= new DevExpress.XtraEditors.PictureEdit();
InBlock.gif            Form f
= new Form();
InBlock.gif            f.Controls.Add(pb);
InBlock.gif            f.MinimizeBox 
= false;
InBlock.gif            f.MaximizeBox
=false;
InBlock.gif            pb.Dock
=DockStyle.Fill;
InBlock.gif            pb.Properties.SizeMode 
= DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch ;
InBlock.gif            f.StartPosition 
= FormStartPosition.CenterScreen;
InBlock.gif            pb.Properties.PictureStoreMode 
= DevExpress.XtraEditors.Controls.PictureStoreMode.ByteArray;
InBlock.gif            pb.EditValue 
= byt_Image;
InBlock.gif            f.Show();
ExpandedBlockEnd.gif        }

转载于:https://www.cnblogs.com/aaliujing/archive/2006/12/18/595773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值