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

  1. 前言
  2. 步骤
    1. 一在SQL Server中已有数据库中创建一个表用来存储图片
    2. 二打开VS创建一个WinForm应用程序向Form1中添加一个PictureBox控件再添加两个Button控件将Button1的Text属性分别设为保存图片显示图片
    3. 三在Form1的代码之中首先引入命名空间
    4. 四编写保存图片按钮的单击事件用于保存图片
    5. 五编写显示图片的单击事件将图片从数据库中读取出来显示在PictureBox之中
  3. 结果

前言

数据库课程设计答辩时,老师提出了如果数据是图片或者其他文件类型的时候,顿时觉得自己做的管理系统用到的较多的就是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的代码之中,首先引入命名空间:

示例代码:

 
  1. using System.Data.SqlClient;

  2. using System.IO;

  3. using System.Drawing.Imaging;

  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

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

 
  1. private void button1_Click(object sender, EventArgs e)

  2. {

  3. try

  4. {

  5. string connString = "Data Source = . ;Initial Catalog =hotel;User ID=sa;Pwd=123456";//数据库连接字符串

  6. SqlConnection connection = new SqlConnection(connString);//创建connection对象

  7.  
  8.  
  9. string sql = "insert into Images (BLOBData) values (@blobdata)";

  10. SqlCommand command = new SqlCommand(sql, connection);

  11. //图片路径

  12. string picturePath = @"D:\1.jpg"; //注意,这里需要指定保存图片的绝对路径和图片?

  13.  
  14. //文件的名称,每次必须更换图片的名称,这里很为不便

  15. //创建FileStream对象

  16. FileStream fs = new FileStream(picturePath, FileMode.Open, FileAccess.Read);

  17. //声明Byte数组

  18. Byte[] mybyte = new byte[fs.Length];

  19. //读取数据

  20. fs.Read(mybyte, 0, mybyte.Length);

  21. fs.Close();

  22. //转换成二进制数据,并保存到数据库

  23. SqlParameter prm = new SqlParameter

  24. ("@blobdata", SqlDbType.VarBinary, mybyte.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, mybyte);

  25. command.Parameters.Add(prm);

  26. //打开数据库连接

  27. connection.Open();

  28. command.ExecuteNonQuery();

  29. connection.Close();

  30. }

  31. catch (Exception ex)

  32. {

  33. MessageBox.Show(ex.Message);

  34. }

  35. }

  • 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
  • 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之中。

示例代码:

 
  1. private void button2_Click(object sender, EventArgs e)

  2. {

  3. try

  4. {

  5. string connString = "Data Source = . ;Initial Catalog =hotel;User ID=sa;Pwd=123456";//数据库连接字符串

  6. SqlConnection connection = new SqlConnection(connString);//创建connection对象

  7.  
  8. //打开数据库连接

  9. connection.Open();

  10. //创建SQL语句

  11. string sql = "select BLODID,BLOBData from Images order by BLODID";

  12. //创建SqlCommand对象

  13. SqlCommand command = new SqlCommand(sql, connection);

  14. //创建DataAdapter对象

  15. SqlDataAdapter dataAdapter = new SqlDataAdapter(command);

  16. //创建DataSet对象

  17. DataSet dataSet = new DataSet();

  18. dataAdapter.Fill(dataSet, "BLOBTest");

  19. int c = dataSet.Tables["BLOBTest"].Rows.Count;

  20. if (c > 0)

  21. {

  22. Byte[] mybyte = new byte[0];

  23. mybyte = (Byte[])(dataSet.Tables["BLOBTest"].Rows[c - 1]["BLOBData"]);

  24. MemoryStream ms = new MemoryStream(mybyte);

  25. pictureBox1.Image = Image.FromStream(ms);

  26. }

  27. connection.Close();

  28.  
  29. }

  30. catch (Exception ex)

  31. {

  32. MessageBox.Show(ex.Message);

  33. }

  34. }

  • 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
  • 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盘的一张卡通图。 
c#向SQL Server中存储图片并且再从数据库中读取图片