sql server存储图片

 一般情况下,将图片保存在服务器的某个目录下,在数据库中存储此图片的地址,这样做的好处很明显
  1. 可以节省数据库的存储空间
  2. 当数据库崩溃后,图片资源不会丢失
  3. 向数据库中插入图片时,需要先将图片压缩成二进制表示形式,而从数据库中查询图片时,则需要将二进制流转换为图片,这在频繁查询时会影响程序的性能
  4. ....

下面从纯技术的角度解释如何将图片插入数据库中。

首先在sql server中新建一个表Images,sql语句如下:

create table Images  
  1. (  
  2.  BLODID int identity not null,  
  3.  BLOBData image not null  
  4. )  


 

其中 BLOBData字段采用image数据类型,这是sql server中用于存储图片的一种数据类型

下面阐述一下程序的思路

  1. 点击“浏览”按钮打开选择对话框,用户可以选择想要存储到数据库中的图片
  2. 点击“存储图片”按钮,将图片插入到数据库中
  3. 点击”读取图片“按钮,将图片从数据库中查询出来

具体步骤如下:

  1. 新建一个winform窗体,放置一个文本框,两个按钮,一个OpenFileDialog控件,一个PictureBox控件

      界面布局图下:

       2.声明全局变量filename:

private string filename = string.Empty;  

在”浏览“按钮的单击事件中添加如下代码:

if (this.openFileDialog1.ShowDialog() == DialogResult.OK)  
  1.             {  
  2.                 filename = this.openFileDialog1.FileName;                  
  3.             }  


 

     3.在”存储图片“按钮的单击事件中添加如下代码:

                           try  
  1.            {  
  2.                string strConn = "user id=sa;password=sa;initial catalog=MyTest;Server=YHB;Connect Timeout=30";  
  3.                SqlConnection connection = new SqlConnection(strConn);  
  4.                string sql = "insert into Images (blobdata) values (@blobdata)";  
  5.                SqlCommand command = new SqlCommand(sql, connection);  
  6.                //图片路径   
  7.                string picturePath = @"D:\My Documents\My Pictures\000_d74047f595809456636fd470a00f0ff8.jpg";  
  8.                                                 
  9.                FileStream fs = new FileStream(picturePath, FileMode.Open, FileAccess.Read);   
  10.                Byte[] mybyte = new byte[fs.Length];                  
  11.                fs.Read(mybyte,0,mybyte.Length);  
  12.                fs.Close();                  
  13.                SqlParameter prm = new SqlParameter  
  14. "@blobdata", SqlDbType.VarBinary, mybyte.Length);  
  15.                prm.Value = mybyte;  
  16.                command.Parameters.Add(prm);  
  17.                  
  18.                connection.Open();  
  19.                command.ExecuteNonQuery();  
  20.                connection.Close();  
  21.                MessageBox.Show("存储成功");  
  22.            }  
  23.            catch (Exception ex)  
  24.            {  
  25.                MessageBox.Show(ex.Message);  
  26.            }  

    4.在”读取图片“按钮的单击事件中添加如下代码:

                           try  
  1.             {  
  2.                 //创建数据库连接字符串   
  3.                 string strConn = "user id=sa;password=sa;initial catalog=MyTest;Server=YHB;Connect Timeout=30";  
  4.                 //创建SqlConnection对象   
  5.                 SqlConnection connection = new SqlConnection(strConn);  
  6.                 //打开数据库连接   
  7.                 connection.Open();  
  8.                 //创建SQL语句   
  9.                 string sql = "select blodid,blobdata from Images order by blodid";  
  10.                 //创建SqlCommand对象   
  11.                 SqlCommand command = new SqlCommand(sql, connection);  
  12.                 //创建DataAdapter对象   
  13.                 SqlDataAdapter dataAdapter = new SqlDataAdapter(command);  
  14.                 //创建DataSet对象   
  15.                 DataSet dataSet = new DataSet();  
  16.                 dataAdapter.Fill(dataSet, "BLOBTest");  
  17.                 int c = dataSet.Tables["BLOBTest"].Rows.Count;  
  18.                 if (c > 0)  
  19.                 {  
  20.                     Byte[] mybyte = new byte[0];  
  21.                     mybyte = (Byte[])(dataSet.Tables["BLOBTest"].Rows[c - 1]["BLOBData"]);  
  22.                     MemoryStream ms = new MemoryStream(mybyte);  
  23.                     pictureBox1.Image = Image.FromStream(ms);  
  24.                 }  
  25.                 connection.Close();  
  26.   
  27.             }  
  28.             catch (Exception ex)  
  29.             {  
  30.                 MessageBox.Show(ex.Message);  
  31.             }  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值