您的当前位置:首页档案管理数据库系统中的图片存取

档案管理数据库系统中的图片存取

2020-01-06 来源:飒榕旅游知识分享网
维普资讯 http://www.cqvip.com 第23卷第5期 昆明冶金高等专科学校学报 Vo1.23 No.5 2007年9月 Journal of Kunming Metallurgy College Sep.2007 档案管理数据库系统中的图片存取 杨 辉 (昆明冶金高等专科学校测绘与计算机信息学院,云南昆明650033) 摘要:在数据库管理系统中,用SQL Server的Image数据类型可以保存图像数据,使得图片数据管理既方便又 安全,但必须把图片类型转换成二进制数据,这对该类数据的使用带来了很大的难度。阐述了用VB.NET提供 的MemoryStream类来实现对图像数据的存取操作方法,在存储操作中把图像数据转换二进制流,而在显示图片 时把二进制流转换成图像数据再放到图片框中。从而完成对SQL Server数据库中Image数据的保存及使用。 关键词:数据库图像存取;SQL Server;VB.NET;MemoryStream类 中图分类号:TP3l1.13 文献标识码:A 文章编号:1009—0479一(2007)05—0050—04 On Image Access in File Management System Database YANG Hui (Faculty of Mapping and Computer Information,Kunming Metallurgy College,Kunming 650033,China) Abstract:In database management system,image data with SQL Server can be preserved for image data, making image data management more convenient and safe.Nevertheless,the pictures must be converted into binary data,which brings much diifculty in using this type of data.Storage operation of image data realized by MemoryStream with VB.NET was expounded.In the storage operation,image data should be changed into binary system,and in displaying the images,the binary system flow should be changed into image data to place in the photo box,SO as to complete the use of image data in SQL Server database. Key words:image database access;SQL server;VB.NET;MemoryStream 号字节数组形式存储数据,其创建的流以内存而 0引言 不是磁盘或网络连接作为支持存储区,可在内存 在档案管理数据库系统中经常有大量的图片 中直接访问这些封装的数据,内存流可降低应用 需要保存,如员工的照片、身份证复印件、学历 程序中对临时缓冲区和临时文件的需要,因而用 证明等,简便的方法是把图片存储在指定的文件 MemoryStream类操作数据库的图像效率较高。 夹下,数据库中只保存图片所在的路径和图片名, 但对数据的管理很不方便,同时安全性和可靠性 1解决方案的选择 也不能保证;另一种方法是把图片数据存储在数 本档案数据库管理系统用VB.NET和SQL 据库中。在SQL Server数据库中提供了Image数 Server 2000实现对数据库的操作。 据类型,该类型存储的是可变长度的二进制数, 数据库管理系统是信息管理中的基本工具, 因此要把保存到数据库中的图片文件的类型转换 SQL Server 2000数据库是在性能和可扩展性方面 成二进制数据类型。利用VB.NET提供的Memo— 较为先进的关系型数据库,是Windows操作系统 yrStream类将图像文件以二进制的形式在数据库 下的首选数据库管理系统,在信息管理中有着重 中直接进行读写操作,MemoryStream封装以无符 要的地位;Visual Studio.NET开发平台用于生成 收稿日期:2007—04—03 作者简介:杨辉(1959一),男,云南昆明人,讲师,在读硕士研究生,主要从事数据库应用和程序设计教学和应用系 统的研究开发。 维普资讯 http://www.cqvip.com

第5期 杨辉:档案管理数据库系统中的图片存取 51 WEB应用程序、桌面应用程序和移动应用程序, VB.NET、VC++.NET、VC}}.NET、vj}}.NET、 法,一种是把文字信息和图像信息分开保存;即 把文字信息保存在数据库表中,把图像信息保存 在指定的文件夹下,在数据库表中只保存图像文 件的存储路径和文件名,对图片的存取则根据图 像文件的存储路径和文件名来进行,这种方法编 ASP.NET都使用相同的集成开发环境(IDE), 该环境允许它们共享工具并有助于创建混合语言 解决方案。VB.NET是最流行的应用软件开发工 具之一,具有功能强大、控件丰富、编程简单, 程简单,但操作不方便,图像信息不安全,不适 合保存重要的图像信息;另一种方法是把文字信 方便、快捷地开发图形用户界面的特性,因此用 SQL Server 2000和VB.NET开发信息管理系统是 众多开发人员的首选。 1.1数据库表的创建 根据用户需要管理的信息创建用户数据库表, 在需要保存图片表中,增加一个“图片”字段, 数据类型设定为Image。由于该类型存储的是可 变长度的二进制数据,因此不能直接把图像数据 存储到Image字段,要先把图像数据转换成二进 制数据,再把二进制数据存储到Image字段。 1.2数据类型的转换 当获取图片的图像数据并把其调入内存后, 利用VB.NET提供的MemoryStream类把图像数据 转换成可变长度的二进制数据。再把该可变长度 的二进制数据保存到数据库表中的Image数据类 型字段,数据的长度与实际图片的长度相同。 1.3方案特点 在过去的信息管理系统中,图片数据和文字 数据是分开保存的,数据库表中只保存文字数据 和图片的路经及文件名,而图片信息则以图像文 件的形式保存在其它地方,使得对数据的管理很 不方便,同时安全性和可靠性也不能保证,无关 用户进入计算机后,可轻易获得图片信息,如身 份证复印件等。采用本方案后,数据库表中可同 时保存文字数据和图片数据,通过数据库的权限 设置,无关用户进入计算机后不能轻易获得文字 和图片数据信息,而且在一条数据记录上保存文 字和图片数据,因此数据的安全性和可靠性得到 了保障。 该方案解决了数据库中存储图像数据的问题, 提高了信息管理系统的应用功能和范围。由于图 片的保存是一个独立的过程,在其它的应用系统 开发中可以方便的应用,提高了信息系统开发的 效率。 2图像的保存 在信息管理系统中,保存图像一般有两种方 息和图像信息一起保存在数据库表中,直接在数 据库中对文字和图像进行操作,这种方法编程复 杂,但操作简单,数据信息安全。本文所讨论的 为后者。 2.1图像的保存 在保存数据信息时,由于VB.NET中的Com— mandText对象使用SQL语言时Insert语句不支持 可变长度的二进制数据和变量,在插入文字数据 的同时不能插入图像数据,因此图像数据另外利 用ADO.NET的Command.Parameters.add对象添 加进去。在保存图片前,要先保存相关的数据, 否则保存图片操作将找不到相关的纪录,操作失 败。 在教师管理系统中的教师基本情况窗体中创 建一个图片控件(控件名为:Pic—jbqk—tp),以 用来显示图片,当点击“插入图片”按钮时,通 过打开文件对话框选择所需图片,插入到图片框 中,如图1所示。 代码如下: Private Sub cmd—jbqk—crtp—Click(ByVal sender As System.Object,ByVal e As System. EventArgs)Handles cmd—jbqk—crtp.Click 教师基本情况插入照片 Dim pic As Image Dim curpath,filename As String If OpenFileDial0g1.ShowDialog=DialogResult. OK Then pic=New Bitmap(OpenFileDialog1.FileName) Pic—jbqk—tp.Image=pic End If cmd—jbqk—bctp.Enabled=True End Sub 当点击“保存图片”按钮时,把图片控件 (控件名为:Pic—jbqk—tp)中的图像文件转换为 可变长度的二进制流,放在数组变量myimagebyte ()中,再通过调用过程savept来保存图片。代码 维普资讯 http://www.cqvip.com 52 如下: 昆明冶金高等专科学校学报 Dim mysql As String If id0=0 Then 2007年9月 mysql=”update”+CStr(mytable)+”set照 片=@picture where身份证号=@id” Else mysql=”update”+CStr(mytable)+”set 照片=@picture where身份证号=@id and id=” 图1 教师管理系统中的教师基本情况窗体 C n Private Sub cmde —jbqk—bctp—Click(ByValn  D sender As System.Object,ByVal e As System.Even—r r  r tArgs)Handles cmd—jbqk—bctp.Click r V, 教师基本情况保存照片 C rO  r Dim mystream As New MemoryStream‘定义内 存流变量 Pic—jbqk—tp.Image.Save(mystream,Pic— jbqk—tp.Image.RawFormat)’把图片框中的图像 文件转换为二进制内存流数据 Dim myimagebyte()As Byte=mystream.Get— Buffer‘获取二进制流 mystream.Close() Dim biao As String=”jsjbqk”’要保存图片 的表名 savept(biao,myimagebyte,id,0)‘调用保存 图片过程 End Sub 过程savept根据身份证号在数据表的对应记 录中的“照片”字段中保存图片。过程savept有 四个参数:mytable为要保存图片的数据库表名 (字符型);mytp为图像文件的二进制流(Byte 型);id为身份证号(字符型);id0为第二标识 符(整形)。由于教师有多次学习进修阶段,只 用身份证号不能准确定位数据记录,因此要用第 二标识符来辅助定位。代码如下: Public Sub savept(ByVal mytable As String, ByVal mypt()As Byte,ByVal id As Stirng,ByVal id0 As Intl6)保存图片 Try +Chr(39)+CStr(id0)+Chr(39) End If As New SqlCommand(mysql, With mycom .Parameters.Add(New SqlParameter(”@pic— ture”,SqlDbType.Image)).Value=mypt .Parameters.Add(New SqlParameter(”@id”, SqlDbType.NVarChar,18)).Value=id .Connection.Open() .ExecuteNonQuery() .Connection.Close() MessageBox.Show(”照片已被成功保存!”,” 保存照片提示”,MessageB0xButt0ns.OK,Message— Boxlcon.Information) End With Catch ex As Exception MessageBox.Show(”保存照片失败!”,”保 存照片提示”,MessageB0xButt0ns.OK,Message— Boxlcon.Information) End Try End Sub 当保存图片成功时,提示“照片已被成功保 存!”;当保存图片失败时,提示“保存照片失 败!”。 2.2显示数据库中的图像数据 显示数据库中的图像数据是保存图像数据的 逆过程,即把数据库表字段中的二进制数转换为 内存的二进制流,再把内存流的数据转换为图像 数据放到图片框中。代码如下: Private Sub Cmb—jSCX—jsxm—SelectedIndex— Changed(ByVal sender As Object,ByVal e As Sys— tem。EventArgs)Handles Cmb—jSCX—jsxm。Select— edIndexChanged 选择教师姓名后,填充陔教师的基本情况 Public cnn As New OleDb.OkDbC0nnecti0n(” 维普资讯 http://www.cqvip.com 第5期 杨辉:档案管理数据库系统中的图片存取 53 Provider=sqloledb;Data Source=.;Integrated Se— cu ̄ty=SSPI;Initial Catalog=教师管理”) Dim mysql As St6ng mysql=”select from jsjbqk where姓名=” ”’&Cmb—jSCX~jSXE.Text&” and教研室= &”“’&Cmb—jSCX—jys.Text&”“’ Dim con As New OleDbCommand con.Connection=cnn con.CommandText=mysql If cnn.State=ConnectionState.Closed Then cnn. Open() dr=con.ExecuteReader While dr.Read txt—jbqk—id.Text=dr.Item(”身份证号”) id=dr.Item(”身份证号”) txt—jbqk—name.Text=dr.Item(”姓名”) jsname=dr.Item(”姓名”) Com—jbqk—xb.Text=dr.Item(”性另0”) (其它字段类似省略) Com—jbqk—XW.Text=dr.Item(”学位”) If dr.IsDBNull(18)=True Then Pic—jbqk—tp.Image=Nothing Else Dim mypicturebyte()As Byte=CType(dr.Item (18),Byte()) Dim mstream As New MemoryStream(mypicture— byte) ic—jbqk—tp.SizeMode=PictureBoxSizeMode. StretchImage Pic—jbqk—tp.Image=Image.FromStream (mstream) mstream.Close() End If End While dr.Close() cnn.Close() jsjbqkshow(0) butt(1,1,1,1,1) cmd—jbqk—bctp.Enabled=False TabControl1.SelectedTab=TabPage1 End Sub 3结语 本文介绍了图像文件在SQL Server数据库中 的存储和显示的方法,并把存储方法做成一个过 程,在其它的应用程序中也可以调用,以在使用 时提供方便。需要注意的是,在保存图片前要先 保存相关的数据,否则在保存图片操作时将找不 到相关的纪录,操作失败。 本文中的程序已在教师管理信息系统中用 VB.NET实现,测试运行正常,对数据库的操作 运行速度也较快,有一定的实用价值;另外,对 SQL Server数据库的图像操作也可以把存取操作。 做成SQL Server数据库的存储过程来实现,方法 类似。本文叙述的程序中,有部分代码内容与图 像操作无关而被省略,在使用时只需根据实际情 况参照给出的代码即可。 参考文献: [1]罗斌.Visual Basic.NET精彩编程实例集锦[M].北 京:中国水利水电出版社。2006. [2]章立民.Visual Basic2003—2005开发秘诀与范例大全 [M].北京:电子工业出版社,2005. [3]王秀红,刘造新.Visual Basic.NET程序设计教程与 实训[M].北京:北京大学出版社,2006. [4]杜兆将,郭鲜凤,刘占祥.SQL Server数据库管理与开 发教程与实训[M].北京:北京大学出版社,2006. [责任编辑:贾朝光] 

因篇幅问题不能全部显示,请点此查看更多更全内容