c#向SQL Server中存储图片并且再从数据库中读取图片

本文介绍如何使用C#将图片保存到SQL Server数据库中并从中读取出来。通过创建一个WinForm应用程序,实现图片的保存和显示功能。

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

 

c#向SQL Server中存储图片并且再从数据库中读取图片

标签: 数据库图片存储
  4935人阅读  评论(4)  收藏  举报
  分类:

前言

数据库课程设计答辩时,老师提出了如果数据是图片或者其他文件类型的时候,顿时觉得自己做的管理系统用到的较多的就是Char类型。于是,答辩结束后,就搜集资料学习,在查找资料的时候发现,有的一开始并不能看懂,找到一篇文档,自己做了一个测试,然后发现出现了一点小问题,虽然从整体上来说,并不影响,但是对于初学者而言就有点头痛了。我只是一个搬运工,顶多就是自己实际测试过,成功了才敢写在这里,毕竟以后的学习和工作可能会用到,可以坑别人,但是不要坑自己。

步骤

一,在SQL Server中已有数据库中创建一个表,用来存储图片

示例代码: 
use MySchool 
go 
if exists (select * from sysobjects where name = 'Images') 
drop table Images 
go 
create table Images 

BLODID int identity not null, 
BLOBData image not null 
)
 
上面MySchool是数据库名称,可以使用其他数据库。建的表名称是Images列名分别是BLODID (图片编号)和BLOBData(图片数据)。

二,打开VS,创建一个WinForm应用程序。向Form1中添加一个PictureBox控件,再添加两个Button控件,将Button1的Text属性分别设为”保存图片”,”显示图片”。
三,在Form1的代码之中,首先引入命名空间:

示例代码:

using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;

   
  • 1
  • 2
  • 3
  • 4
四,编写”保存图片”按钮的单击事件,用于保存图片;
private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string connString = "Data Source = . ;Initial Catalog =hotel;User ID=sa;Pwd=123456";//数据库连接字符串
                SqlConnection connection = new SqlConnection(connString);//创建connection对象


                string sql = "insert into Images (BLOBData) values (@blobdata)";
                SqlCommand command = new SqlCommand(sql, connection);
                //图片路径
                string picturePath = @"D:\1.jpg"; //注意,这里需要指定保存图片的绝对路径和图片?

                //文件的名称,每次必须更换图片的名称,这里很为不便
                //创建FileStream对象
                FileStream fs = new FileStream(picturePath, FileMode.Open, FileAccess.Read);
                //声明Byte数组
                Byte[] mybyte = new byte[fs.Length];
                //读取数据
                fs.Read(mybyte, 0, mybyte.Length);
                fs.Close();
                //转换成二进制数据,并保存到数据库
                SqlParameter prm = new SqlParameter
              ("@blobdata", SqlDbType.VarBinary, mybyte.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, mybyte);
                command.Parameters.Add(prm);
                //打开数据库连接
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
五,编写”显示图片”的单击事件,将图片从数据库中读取出来显示在PictureBox之中。

示例代码:

private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                string connString = "Data Source = . ;Initial Catalog =hotel;User ID=sa;Pwd=123456";//数据库连接字符串
                SqlConnection connection = new SqlConnection(connString);//创建connection对象

                //打开数据库连接
                connection.Open();
                //创建SQL语句
                string sql = "select BLODID,BLOBData from Images order by BLODID";
                //创建SqlCommand对象
                SqlCommand command = new SqlCommand(sql, connection);
                //创建DataAdapter对象
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                //创建DataSet对象
                DataSet dataSet = new DataSet();
                dataAdapter.Fill(dataSet, "BLOBTest");
                int c = dataSet.Tables["BLOBTest"].Rows.Count;
                if (c > 0)
                {
                    Byte[] mybyte = new byte[0];
                    mybyte = (Byte[])(dataSet.Tables["BLOBTest"].Rows[c - 1]["BLOBData"]);
                    MemoryStream ms = new MemoryStream(mybyte);
                    pictureBox1.Image = Image.FromStream(ms);
                }
                connection.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

结果

图片是放在D盘的一张卡通图。 
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值