首页 > 数据库 >在SQL Server数据库实现图片文件的存取

在SQL Server数据库实现图片文件的存取

时间:2023-10-11 11:44:06浏览次数:43  
标签:Picture 数据库 cmd Server SQL new 存取 ID 图片

-- 如果要将图片数据存入SQL Server数据库的表中,我们必须使用SQL Server的image数据类型。

在很多时候,我们需要将图片文件存入到SQL Server数据库中,并且在使用的时候将数据库中的图片取出。本文将描述用C#语言来实现这一过程。
  数据库表结构
  如果要将图片数据存入SQL Server数据库的表中,我们必须使用SQL Server的image数据类型,在被试验中,我们将使用如下的语句创建数据库表StudentInfo:
  CREATE TABLE [dbo].[StudentInfo]
  (
  [ID] [int] IDENTITY(1,1) NOT NULL,
  [Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
  [Age] [int] NULL,
  [Sex] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
  [Class] [varchar](15) COLLATE Chinese_PRC_CI_AS NULL,
  [Hobby] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
  [Picture] [image] NULL
  )
  其中字段Picture字段为image数据类型,用来保存学生的照片。
  图片存入数据库
  要将图片数据存入到数据库表的image数据类型的字段中,首先需要将图片文件中的数据读入到内存字节中,在将内存字节存入数据库中,具体示例代码如下:

 

private void btnUpload_Click(object sender, EventArgs e)
  {
  //上传图片到数据库
  OpenFileDialog openDlg = new OpenFileDialog();
  openDlg.Filter = "图片文件(*.jpg)|*.jpg";
  string filePath = "";
  if (openDlg.ShowDialog() == DialogResult.OK)
  {
  filePath = openDlg.FileName;
  this.txtFilePath.Text = filePath;
  this.picShow.ImageLocation = filePath;
  //打开文件流,用来读取图片文件中的数据
  FileStream stream = new FileStream(filePath,FileMode.Open,FileAccess.Read);
  //将文件流中的数据存入内存字节组中
  byte[] buffer = new byte[stream.Length];
  stream.Read(buffer,0,(int)stream.Length);
  stream.Close();
  try
  {
  //调用存储图片数据的存取过程
  string strName = Path.GetFileName(filePath);
  string connString = "Data Source=.;Initial Catalog=StuDB;Persist Security Info=True";
  SqlConnection conn = new SqlConnection(connString);
  conn.Open();
  SqlCommand cmd = new SqlCommand("proc_UploadPicture", conn);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1;
  cmd.Parameters.Add("@Picture", SqlDbType.Image).Value = buffer;
  cmd.Parameters.Add("@Ext", SqlDbType.VarChar).Value = strName;
  cmd.ExecuteNonQuery();
  conn.Close();
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  }
  }
  存储过程proc_UploadPicture代码如下:
  Create procedure [dbo].[proc_UploadPicture]
  @ID int,
  @Picture image
  AS
  update StudentInfo set Picture = @Picture
  where ID = @ID
  从数据库读取图片
  要从数据库中获取图片数据,并将图片显示在界面上,需要将数据库中的图片数据读入到内存中,在将内存的数据用位图来格式化,并将位图显示在界面的PictureBox控件中。具体的实例代码如下:
  private void btnDownload_Click(object sender, EventArgs e)
  {
  //将数据库中的图片显示出来
  try
  {
  byte[] imageBytes;
  string connString = "Data Source=.;Initial Catalog=StuDB;Persist Security Info=True";
  SqlConnection conn = new SqlConnection(connString);
  conn.Open();
  SqlCommand cmd = new SqlCommand("proc_DownloadPicture", conn);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 1;
  SqlDataReader dataReader = cmd.ExecuteReader();
  if (dataReader.Read())
  {
  //获取图片数据
  imageBytes = (byte[])dataReader["Picture"];
  //将内存流格式化为位图
  MemoryStream stream = new MemoryStream(imageBytes);
  Bitmap bmap = new Bitmap(stream);
  stream.Close();
  //将位图显示在界面的PictureBox控件中
  this.picShow.Image = bmap;
  }
  dataReader.Close();
  conn.Close();
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  }    存储过程proc_DownloadPicture代码如下:  Create procedure [dbo].[proc_DownloadPicture]  @ID int  as  select Picture  from StudentInfo  where ID = @ID

 本文转自:https://blog.csdn.net/u013934107/article/details/90112616

标签:Picture,数据库,cmd,Server,SQL,new,存取,ID,图片
From: https://www.cnblogs.com/leebokeyuan/p/17756710.html

相关文章

  • SQL 语句 增删改查、边学习边增加中..... 这一部分为select
    SQL语句按照最大的类别分为1、增加insert 2、删除delete  https://www.cnblogs.com/kuangmeng/p/17756654.html3、修改update4、查询select: https://www.cnblogs.com/kuangmeng/p/17756425.html这一部分为select查询操作,以及对应的Leecode题,进行加......
  • MySQL的最左原则
    一、简述MySQL索引的最左原则指的是,当使用多列索引时,MySQL会优先使用索引中最左边的列。如果查询条件中包含了索引的最左列,那么MySQL会使用这个索引来加速查询。更具体的描述:建立一个索引,对于索引中的字段,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配......
  • MySQL--索引
    MySQL--索引索引概述索引是帮助MySQL高效获取数据的数据结构(有序)演示使用全表扫描性能极低使用二叉搜索树更高效优缺点索引结构B+Tree索引Hash索引R-Tree(空间索引)Full-text(全文索引)存储引擎支持情况平常所说的索引都是指的B+树索引二叉树B-Tree(多路......
  • sql 子查询
    子查询也就是嵌套SELECT语句,一个SELECT语句的查询结果可以作为另一个语句的输入。子查询能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用。查询选修了老师名叫Lee(假设唯一)的学生名字sql>selectstNamefromStudentwherestIdin(selectdistinctstId......
  • Apipost一大波新功能来袭!连接数据库、TCP协议、MySQL DDL数据导入
    本次Apipost带来数据库功能、TCP协议调试等重量级功能,感兴趣的话大家升级试试吧~数据库配置Apipost提供了数据库连接功能,以便开发者可以在接口调试中可以使用数据库获取入参或进行断言校验目前7.2.2的Apipost支持Mysql、SQLSever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Re......
  • es和mysql的对比
         ......
  • 探索Redis与MySQL的双写问题
    本文已收录至GitHub,推荐阅读......
  • 深入浅出MySQL MRR(Multi-Range Read)
    本文已收录至GitHub,推荐阅读......
  • hsqldb安装与运行
    1.下载:http://sourceforge.net/projects/hsqldb/files/2.介绍:纯java编写,适合开发测试,非常小,下载的压缩包只有3M多,解压安装后只有10M多,只要引用hsqldb\lib\hsqldb.jar到工程中,不需要安装启动hsqldb数据库,使用内存模式连接,就可以跑起来(这种模式多用于测试)3.......
  • 探索Redis与MySQL的双写问题
    本文已收录至GitHub,推荐阅读......