程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 保存圖象到Sql Server,並且讀取顯示

保存圖象到Sql Server,並且讀取顯示

編輯:關於SqlServer
現有圖象數據表
CREATE TABLE [ENTR_Image] (
    [EIGuid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF__ENTR_Imag__EIGui__2C3F4C1F] DEFAULT (newid()),
    [EImage] [image] NOT NULL CONSTRAINT [DF__ENTR_Imag__EImag__2D337058] DEFAULT (''),
    [VImage] [image] NOT NULL CONSTRAINT [DF__ENTR_Imag__VImag__2E279491] DEFAULT (''),
    [OperationTime] [datetime] NOT NULL CONSTRAINT [DF__ENTR_Imag__Opera__2F1BB8CA] DEFAULT (getdate()),
     PRIMARY KEY  CLUSTERED 
    (
        [EIGuid]
    )  ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


需要把指定的圖片添加到數據庫裡面
打開圖片到pictureBox裡面(需要把2張圖片分別載入pictureBox)
    private void button1_Click(object sender, System.EventArgs e)
        {
            OpenFileDialog oFileDialog1 = new OpenFileDialog();
            oFileDialog1.InitialDirectory = "c:\\" ;
            oFileDialog1.Filter ="Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
            oFileDialog1.FilterIndex = 1 ;
            oFileDialog1.RestoreDirectory = true ;
            if(oFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if(oFileDialog1.FileName != null)
                {
                    if (pictureBox1.Image!=null)
                    {
                        //MessageBox.Show("OK");
                        label4.Text=oFileDialog1.FileName; 
                        pictureBox2.Image=Image.FromFile(oFileDialog1.FileName);
                        return;
                    }
                    label3.Text=oFileDialog1.FileName; 
                    //textBox1.Text=oFileDialog1.FileName; 
                    pictureBox1.Image=Image.FromFile(oFileDialog1.FileName);
                
                }
            }
        }
保存圖象到數據表
    private void button2_Click(object sender, System.EventArgs e)
        {
            //保存
            string filename =label3.Text;
            byte [] content = ImageToStream(filename);
            
            string filename1 =label4.Text;
            byte [] content1 = ImageToStream(filename1);

            StoreImage(content,content1);
        } 其中用到如下方法:把指定文件名的圖片轉化為二進制流byte[]
    private byte[] ImageToStream(string fileName)
        {
            Bitmap image = new Bitmap(fileName);
            MemoryStream stream = new MemoryStream();
            image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            return stream.ToArray();
        }
保存byte[] 到數據表
    private void StoreImage(byte[] content,byte[] connect1)
        {
//            if (MainForm.conn.State.Equals(ConnectionState.Closed)) 
//                MainForm.conn.Open();
            string str_Conn="server=SERVER-DBT;database=LogERP;uid=logerp;pwd=logerpok;Max Pool Size=20000;";
            
            try
            {
                SqlConnection sqlconn=new SqlConnection(str_Conn);
                sqlconn.Open();
               
                SqlCommand insert = new SqlCommand("Insert into ENTR_Image(EImage,VImage) values (@EImage,@VImage)");
                insert.Connection=sqlconn;
                SqlParameter imageParameter = 
                    insert.Parameters.Add("@EImage", SqlDbType.Binary);
                imageParameter.Value = content;
                imageParameter.Size  = content.Length;

                SqlParameter imageParameter1 = 
                    insert.Parameters.Add("@VImage", SqlDbType.Binary);
                imageParameter1.Value = connect1;
                imageParameter1.Size  = connect1.Length;
                

                int i=insert.ExecuteNonQuery();                
                sqlconn.Close();
                MessageBox.Show(i.ToString());

            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                MessageBox.Show(ex.StackTrace.ToString ()); 
            }
            finally
            {
//                MainForm.conn.Close();
            }
        } 
新增以後根據Guid進行查詢,圖象
        private string str_Guid;
        public string str_ImageGuid
        {
            set
            {
                str_Guid=value;
            }
        }
        private void ReadImage()
        {
            string str_Conn="server=172.17.100.132;database=Northwind;uid=sa;pwd=19791225;Max Pool Size=20000;";
            try
            {
                //根據GUID讀取圖片
                SqlConnection sqlconn=new SqlConnection(str_Conn);
                sqlconn.Open();
                string str_Sql="select EImage from ENTR_Image where EIGuid='"+str_Guid+"'";
                SqlCommand cmd=new SqlCommand(str_Sql);
                cmd.Connection=sqlconn;
                byte [] content = (byte[] )cmd.ExecuteScalar();
                try
                {
                    MemoryStream stream = new MemoryStream(content);
                    pictureBox1.Image= Image.FromStream(stream); 
                }
                catch
                {

                }


                str_Sql="select VImage from ENTR_Image where EIGuid='"+str_Guid+"'";
                cmd=new SqlCommand(str_Sql);
                cmd.Connection=sqlconn;
                content = (byte[] )cmd.ExecuteScalar();
                try
                {
                    MemoryStream stream = new MemoryStream(content);
                    pictureBox2.Image= Image.FromStream(stream); 
                }
                catch
                {
                }
                sqlconn.Close();
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                MessageBox.Show(ex.StackTrace.ToString ()); 
            }
        } byte[] 的初始化:
  byte[] byt={};
            ClassEnt_rsDrawing.Browser=byt;
現在如果轉換過來,把SQL裡面的Image 字段的內容讀入文件:
代碼如下:
    /**//// <summary>
        /// 根據2進制數組獲得文件
        /// </summary>
        /// <param name="byt">2進制數據</param>
        /// <param name="str_Filename">目標文件</param>
        private void GetFileFromDataBase(byte[] byt,string str_Filename)
        {
            //MemoryStream stream = new MemoryStream(byt);
            FileStream fs_stream=new FileStream(str_Filename,FileMode.CreateNew);
            BinaryWriter writefile = new BinaryWriter(fs_stream);
            writefile.Write(byt);
            writefile.Close();            
        }
輔助代碼:
保存對話框
    /**//// <summary>
        /// 另存為 保存文件對話框
        /// </summary>
        /// <returns></returns>
        private string fun_savefilename()
        {
            string savefilename="";
            SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
            saveFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*"  ;
            
            saveFileDialog1.FilterIndex = 1 ;
            saveFileDialog1.RestoreDirectory = true ;
            
            if(saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                savefilename=saveFileDialog1.FileName;                 
            }
            return savefilename;
        }
把數據庫裡面的Image  讀出到byte[]裡面,代碼:
這裡Browser是Image 類型
    public byte[] GetImage(string str_Guid)
        {
            byte[] byt={};
            StringBuilder strSql=new StringBuilder();
            strSql.Append("select Browser from rsDrawing ");
            if(str_Guid.Trim()!="")
            {
                strSql.Append(" where Guid='"+str_Guid+"'");
            }
            byt=DataBase.GetByteImage(strSql.ToString());            
            return byt;
        }



    /**//// <summary>
        /// 根據Sql(完整)語句,獲得Byte[]圖片信息
        /// </summary>
        /// <param name="str_Sql">SQL語句</param>
        /// <returns>二進制流</returns>
        public static byte[] GetByteImage(string str_Sql)
        {            
            string connectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"].ToString();
            byte [] content={};
            SqlConnection sqlconn=new SqlConnection(connectionString);
            sqlconn.Open();            
            SqlCommand cmd=new SqlCommand(str_Sql);
            cmd.Connection=sqlconn;
            content = (byte[] )cmd.ExecuteScalar();
            sqlconn.Close();
            return content;
        }
顯示byte[] 到Form 裡面
    /**//// <summary>
        /// 顯示圖象到窗體
        /// </summary>
        /// <param name="byt_Image"></param>
        private void ImageLoad(byte[] byt_Image)
        {
            DevExpress.XtraEditors.PictureEdit pb = new DevExpress.XtraEditors.PictureEdit();
            Form f= new Form();
            f.Controls.Add(pb);
            f.MinimizeBox = false;
            f.MaximizeBox=false;
            pb.Dock=DockStyle.Fill;
            pb.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch ;
            f.StartPosition = FormStartPosition.CenterScreen;
            pb.Properties.PictureStoreMode = DevExpress.XtraEditors.Controls.PictureStoreMode.ByteArray;
            pb.EditValue = byt_Image;
            f.Show();
        }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved