码迷,mamicode.com
首页 > 其他好文 > 详细

C?#? ?读?写?S?Q?L?数?据?库?I?m?a?g?e?字?段

时间:2014-08-02 12:37:53      阅读:168      评论:0      收藏:0      [点我收藏+]

标签: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;         

                }

C?#? ?读?写?S?Q?L?数?据?库?I?m?a?g?e?字?段,布布扣,bubuko.com

C?#? ?读?写?S?Q?L?数?据?库?I?m?a?g?e?字?段

标签:os   io   文件   数据   cti   ar   new   数据库   

原文地址:http://www.cnblogs.com/xiarongrong/p/3886716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!