图片在SQL Server数据库中的存取

本文介绍如何使用SQLServer2005和C#实现图片数据的存储与读取。包括使用SQL语句直接保存图片到数据库的方法,以及利用ADO.NET技术进行操作的过程。此外,还演示了如何将数据库中的图片数据转换为二进制形式并显示在PictureBox中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件环境:SQL Server 2005+VS 2005 ,语言为:C#

1.将图片保存到数据库中

1.1使用SQL语句直接保存到数据库中

insert into [PhotoDB].[dbo].[Photo_Test](ID,[Name],Photo)
select 1,'张三',photoes.*
from openrowset(BULK 'G:/a.bmp',SINGLE_BLOB)photoes

注意:

(1)photoes.*表示openrowset方法返回的行集,其全部内容(以photoes表示,可以任意指定,上下保持一直即可),全部插入到数据库中。

(2)不要使用insert into [PhotoDB].[dbo].[Photo_Test]values(1,'张三','G:/a.bmp')来插入图片,这样数据库中保存的不是合法的二进制格式,后面在使用MemoryStream来读取的时候,会提示"参数错误"

1.2使用ADO.NET技术
            string str = "insert into [PhotoDB].[dbo].[Photo_Test](ID,[Name],Photo) select 1,'张三',photoes.* from openrowset(BULK 'G://a.bmp',SINGLE_BLOB)photoes";
            SqlConnection conn = GetConnection();
            SqlCommand sc = new SqlCommand(str, conn);
            try
            {
            }
            catch(Exception es)
            {
                MessageBox.Show(es.Message );
            }
          int InsertNun= sc.ExecuteNonQuery();
          if (InsertNun != 0)
          {
              MessageBox.Show("插入成功");
          }
          else
          {
              MessageBox.Show("插入失败");
          }
          conn.Close();

2.将图片此二进制数据形式从数据库中读出,并通过PictureBox展示

           try
            {
            SqlConnection conn=this.GetConnection();
            string selectstr = "select * from Photo_Test";
            SqlDataAdapter sda = new SqlDataAdapter(selectstr, conn);
            DataSet ds = new DataSet();
            ds.Tables.Add("PhotoDatabase");
            sda.Fill(ds.Tables["PhotoDatabase"]);

            byte[] imagebyte = new byte[0];
            imagebyte = (byte[])ds.Tables["PhotoDatabase"].Rows[0]["Photo"];
            MemoryStream ms = new MemoryStream(imagebyte);
            Bitmap bmp = new Bitmap(ms);
            System.Drawing.Image image = bmp;

            pictureBox1.Image = image;
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

注意:这里没有考虑对数据库性能及物理存储空间的影响,通常将图片的路径存放在数据库中而不图片数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值