广告位联系
返回顶部
分享到

sql server实现图片的存入和读取的流程介绍

MsSql 来源:互联网 作者:佚名 发布时间:2024-05-23 21:47:39 人浏览
摘要

首先提醒一下,无论是将图片存入数据库,还是从数据库中读取,都是采用流的形式进行,虽然,在数据库中,存储图片的类型是Image,但是sql中的Image和C#中的Image不一样,就如同sql中的null的

首先提醒一下,无论是将图片存入数据库,还是从数据库中读取,都是采用流的形式进行,虽然,在数据库中,存储图片的类型是Image,但是sql中的Image和C#中的Image不一样,就如同sql中的null的判断在C#中得用DBNULL来判断

先看窗体设计,很简单,一共就五个控件,名字都没改,pictureBox1,textBox1,button1,button2,button3(依次从上到下,从左到右),看源码的时候会看到的

数据库中表的设计

就一个Image

首先程序运行,可以先选择一张图片

文本框中是图片在本地磁盘上的路径,在此掩盖部分

然后点击,存入数据库

提示存入成功

在此,将窗体关闭,重新打开,读取图片。

至于为什么这么做看到源码就知道了

重新打开后的

点击从数据库中读取按钮

拿到了刚才存入的图片

源码:

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

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace 读取数据库中的图片

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        /// <summary>

        /// 选择图片

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button1_Click(object sender, EventArgs e)

        {

            //初始化打开文件 对话框

            OpenFileDialog ofdlgTest = new OpenFileDialog();

            ofdlgTest.Filter = "*.jpg|*.png";   //文件过滤 筛选可以打开的文件

            ofdlgTest.Multiselect = false;    //设置不可以选择多个文件

 

            //显示文件打开对话框

            DialogResult result = ofdlgTest.ShowDialog();

             

            //选择打开按钮的时候,将文件名显示到文本框中

            if (result== DialogResult.OK)                   //判断是否打开文件

            {

                this.textBox1.Text = ofdlgTest.FileName;

 

                pictureBox1.Image = Image.FromFile(ofdlgTest.FileName);

            }

        }

 

        /// <summary>

        /// 存入数据库

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button2_Click(object sender, EventArgs e)

        {

            string constr = "Data Source=.;Initial Catalog=MyFirstDatabase;User Id=sa;PassWord=91811372c";

 

            using(SqlConnection con=new SqlConnection(constr))

            {

                //sql语句  插入图片

                string sql = "insert into ImageTest values(@UserImage)";

                using(SqlCommand com=new SqlCommand(sql,con))

                {

                    byte[] buffer;   //将图片转换为字节数组 存入数据库   textBox1.Text 是文件的路径

                    using(FileStream stream = new FileStream(textBox1.Text, FileMode.OpenOrCreate, FileAccess.Read))

                    {

                        //通过文件路径 打开文件

                        buffer = new byte[stream.Length];

                        stream.Read(buffer, 0, buffer.Length);  //转换后 ,存入buffer中

                    }

 

                    //这个参数 其实 也没必要声明 不过习惯使用 带参数的sql语句了

                    SqlParameter pms = new SqlParameter("@UserImage", SqlDbType.Image) { Value = buffer };

                    com.Parameters.Add(pms);

                    con.Open();

                    string msg = com.ExecuteNonQuery()>0?"存入成功":"存入失败";

                    MessageBox.Show(msg);

                }

            }

        }

 

        /// <summary>

        /// 从数据库中读取

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button3_Click(object sender, EventArgs e)

        {

            string conStr = "Data Source=.;Initial Catalog=MyFirstDatabase;User Id=sa;PassWord=自己的密码";

            using(SqlConnection con=new SqlConnection(conStr))

            {

                //sql语句

                string sql = "select * from ImageTest";

                using (SqlCommand com = new SqlCommand(sql, con))

                {

                    con.Open();

 

                    

                   using(SqlDataReader reader=com.ExecuteReader())

                    {

                        if (reader.HasRows)

                        {

                            //声明一字节数组   将数据库中的图片现存入字节数组中

                            byte[] imageByte;

                            //在这我是知道里面就一张图,所以这么写的,个人根据实际情况,可做修改

                           while(reader.Read())

                            {

                                //将图片转换为字节数组

                                imageByte = (byte[])reader["UserImage"];

 

                                //转换为文件流

                                MemoryStream stream = new MemoryStream(imageByte);

                                //再将文件流 转换为 图像

                                Bitmap bitmap = new Bitmap(stream);

                                pictureBox1.Image = bitmap;

                            }

                        }

                    }

                }

            }

        }

    }

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计