sql server实现图片的存入和读取的流程详解

 更新时间:2024年05月23日 10:35:16   作者:益生菌冻干粉  
这篇文章主要介绍了sql server实现图片的存入和读取的详细流程,文中通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

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

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

数据库中表的设计

就一个Image

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

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

然后点击,存入数据库

提示存入成功

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

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

重新打开后的

点击从数据库中读取按钮

拿到了刚才存入的图片

源码:

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

到此这篇关于sql server实现图片的存入和读取的流程详解的文章就介绍到这了,更多相关sql server图片存入和读取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • sqlserver 2000 远程连接 服务器的解决方案

    sqlserver 2000 远程连接 服务器的解决方案

    在连接本地服务器时,通常使用的是命名管道协议(在服务器网络实用工具里可以看到启用的协议有这个
    2009-06-06
  • SQL Server删除正在恢复数据库的三种方法

    SQL Server删除正在恢复数据库的三种方法

    本文介绍了三种删除卡住的SQL Server数据库的方法:尝试完成恢复后再删除、强制终止恢复进程并删除、以及强制离线后删除,每种方法都有其适用场景和注意事项,需要的朋友可以参考下
    2026-03-03
  • SQL中PIVOT函数的用法小结

    SQL中PIVOT函数的用法小结

    PIVOT 是 SQL Server 中的一个功能,用于将行转换为列,本文主要介绍了SQL中PIVOT函数的用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • sql 游标使用笔记

    sql 游标使用笔记

    sql 游标使用笔记,需要的朋友可以参考下。
    2011-04-04
  • sqlserver中创建链接服务器图解教程

    sqlserver中创建链接服务器图解教程

    链接服务器在跨数据库/跨服务器查询时非常有用(比如分布式数据库系统中),本文将以图文方式详细说明如何利用SQL Server Management Studio在图形界面下创建链接服务器。
    2010-09-09
  • Mybatis中处理特殊SQL处理逻辑解析

    Mybatis中处理特殊SQL处理逻辑解析

    这篇文章主要介绍了Mybatis中处理特殊SQL处理逻辑,在MyBatis中可能会有一些特殊的SQL需要去执行,一般就是模糊查询、批量删除、动态设置表名、添加功能获取自增的主键这几种,现在分别来进行说明,需要的朋友可以参考下
    2023-06-06
  • MSSQL MySQL 数据库分页(存储过程)

    MSSQL MySQL 数据库分页(存储过程)

    有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活
    2012-01-01
  • SQL Server利用bcp命令把SQL语句结果生成文本文件

    SQL Server利用bcp命令把SQL语句结果生成文本文件

    在SQL Server里可以调用DOS下的命令行工具bcp来实现把表里的数据或者SQL语句结果生成文本文件,详细看下操作方法,感兴趣的你可不要错过了哈
    2013-02-02
  • sql server实现分页的方法实例分析

    sql server实现分页的方法实例分析

    这篇文章主要介绍了sql server实现分页的方法,结合实例形式总结分析了SQL Server实现分页功能的常用sql语句,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • 修复SQL Server数据库中的恢复挂起状态的方法总结

    修复SQL Server数据库中的恢复挂起状态的方法总结

    SQL 服务器恢复挂起可能是因为在解析数据库中的某些事务期间系统关闭不当,在本文中,将向你提供各种方法来修复 SQL Server 数据库中的恢复挂起状态,需要的朋友可以参考下
    2024-03-03

最新评论