Vb.net向sql server数据库中保存图片(一)
2024-07-10 13:01:33
供稿:网友
预备知识:stream、ado.net
微软的sql server数据库的image、text等字段都属于二进制的大对象。这些对象的存取和其他轻型对象略有不同。比如,我们打开一个数据表的时候,普通类型的字段都可以看见,而image类型的字段却不行,只能通过编程的方法来读取。这篇资料就是介绍怎样用vb.net来向sql server数据库中存放图片,怎样从数据库中取出图片浏览。我在这里也费了老大的精力,主要是为了答复一个同学的提问。(他刨根问底式的学习方式,把我急出一身冷汗,惭愧。。。。。。)
这个例程用到了 sql server自带的northwind数据库,其中employees(职员)数据表有一个字段“photo”,是用来存放照片的,里面有9条记录,我费了半天力气,想去看看那9个人图片,就是看不见。现在猜测,这些人的photo根本就是空的。所以,我决定添加一些新的记录。
在这个例程里,我实现了一个简单的winform程序,这个程序通过点击“open”按钮选择一个图片文件(bmp或jpg),并显示在图形控件picturebox中。通过“save”按钮存入数据库。点击“view”checkbox可以切换到浏览状态,观看存入数据库的图片。
微软.net framework的system.io命名空间下给我们提供了一个filestream文件流类。我们可以使用这个文件流对二进制大对象轻松进行读写。由于对二进制大对象使用的流操作,所以对于任何文件都具有通用性。读写文本文件也可以这么做。
步骤:
1、 先来看一下northwind数据库中employees表结构
2、 知道.net连接sql server的方法嘛,不知道的话,看看我写的“ado.net中的connection对象”吧。读懂下面这几句没问题吧:
dim conn as new sqlconnection(“server=localhost;database=northwind;integrated security=true;”
dim sqlcomm as new sqlcommand
sqlcomm.connection = conn
sqlcomm.commandtext = "insert into employees (lastname,firstname,photo) values (@lastname,@firstname,@photo)"
dim prm1 as new sqlparameter("@lastname", txtln.text)
dim prm2 as new sqlparameter("@firstname", txtfn.text)
dim prm3 as new sqlparameter("@photo", sqldbtype.varbinary, int(fs.length), _ parameterdirection.input, false, 0, 0, "", datarowversion.current, data)
sqlcomm.parameters.add(prm1)
sqlcomm.parameters.add(prm2)
sqlcomm.parameters.add(prm3)
3、新建一个windows应用程序窗体,界面如下:(图1)