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

本文详细介绍了如何在SQLServer数据库中创建一个专门用于存储图片的表,并通过WinForm应用程序实现图片的保存与读取。首先,通过SQL语句在现有数据库中创建包含图片编号和图片数据字段的表。接着,使用C#编写保存图片和读取图片的代码,实现图片的二进制数据转换和数据库交互。

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

一,在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;

四,编写”保存图片”按钮的单击事件,用于保存图片;

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);
            }
        }

五,编写”显示图片”的单击事件,将图片从数据库中读取出来显示在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);
            }
        }

--------------------- 本文来自 xiaoxiao亮 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/sinat_27714067/article/details/51803075?utm_source=copy

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值