C?#? ?讀?寫?S?Q?L?數?據?庫?I?m?a?g?e?字?段

來源:互聯網
上載者:User

標籤:os   io   檔案   資料   cti   ar   new   資料庫   

    資料庫的Image欄位儲存的是位元組,所以寫入資料庫Image欄位和從資料庫Image欄位讀取的內容都應該為位元組. 

    

1、資料庫Image欄位讀寫檔案  
    寫檔案:寫檔案的過程為將檔案以流檔案形式開啟並將內容讀取到一個byte數組,然後將此byte數組寫入資料庫的Image欄位。

    源碼: 
    FileInfo finfo=new FileInfo("檔案名稱");   //絕對路徑      

    if(finfo.Exists)      

    { 
        SqlConnection conn=new SqlConnection("連接字串");          

        SqlCommand InsertCommand=new SqlCommand();          

        InsertCommand.Connection=conn; 

        InsertCommand.CommandText="Insert into 表名(Image欄位名) values(@Content)";          

        InsertCommand.Parameters.Add("@Content",SqlDbType.Image,(int)finfo.Length,"Image欄位名");   //注意,此處參數Size為寫入的位元組數          

        //讀取檔案內容,寫入byte數組 

        byte[] content=new byte[finfo.Length];        

        FileStream stream=finfo.OpenRead();          

        stream.Read(content,0,content.Length);       

        stream.Close(); 

        InsertCommand.Parameters["@Content"].Value=content;   //為參數賦值        

        try        

        { 
             conn.Open(); 

             InsertCommand.ExcuteNonQuery();          

        } 

        finally         

       { 
             conn.Close();       

       }  

    }      

 

     讀檔案:讀檔案的過程為從資料庫的Image欄位讀取內容儲存到byte數組,然後將此byte數組以檔案流形式寫入檔案。      

     源碼: 
     byte[] content;

     SqlConnetion conn=new SqlConnection("連接字串"); 

     SqlDataAdapter da=new SqlDataAdapter("Select Image欄位名 from 表名",conn);    

     DataSet ds=new DataSet();     

     da.Fill(da,"word"); 

     DataRow dr=ds.Tables["word"].Rows[0];     //將讀取的第一行內容儲存到dr      

     content=(byte[])dr["Image欄位名"]; 

     int ArraySize=content.GetUpperBound(0);   

     FileStream stream=new FileStream("檔案名稱",FileMode.OpenOrCreate,FileAccess.Write);       

     stream.Write(content,0,ArraySize);    

     stream.Close();      

 

2、資料庫Image欄位讀寫圖片  

     綁定到控制項的方式: 
     通過將Image欄位綁定到PictureBox實現。檔案中我提供了一個執行個體,要正常運行需要在Northwind中添加資料庫表Employees,數 據庫表的結構為EmployeeID Int(4) 自動增 長,FirstName nvarchar(10),LastName nvarchar(20),Photo image(16) null。  
     直接用SqlCommand實現: 
     其 實把握住Image欄位存的是byte類型資料,用SqlCommand實現添加、修改就很簡單了,跟文本的區別就是在讀出的時候需要將byte類型資料 轉化為Image圖片,在寫入時需要將Image圖片以流的形式轉為為byte數組,然後再將byte數組儲存到Image欄位。     

     執行個體: 
            comm = "Insert into MyEmployees(FirstName,LastName,Photo) values(@FName,@LName,@Photo)"; 

            SqlCommand command=new SqlCommand(comm);   

            command.Connection = conn;             //建立Parameter 

            command.Parameters.Add("@FName",SqlDbType.NVarChar);   

            command.Parameters[0].Value = textBox1.Text; 

            command.Parameters.Add("@LName", SqlDbType.NVarChar);    

            command.Parameters[1].Value = textBox2.Text; 

            command.Parameters.Add("@Photo",SqlDbType.Image);       

            command.Parameters[2].Value = imgByte; 

     其中imgByte為Byte數組,通過FileStream的Read填充的byte資料。  

                DataRow dr = dt.Tables[0].Rows[0];               

                byte[] br = null; 

                MemoryStream ms = new MemoryStream();            

                if (dr["image1"].ToString() != "") 

                { 

                    br = (byte[])dr["image1"]; 

                    ms = new MemoryStream(br, 0, br.Length); 

                    this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;         

                    this.pictureBox1.Image = Image.FromStream(ms);              

                    ms.Close();         

                }                

                else          

               { 
                    this.pictureBox1.Image = null;         

                }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.