VB.NET数据库编程中的图形处理
2024-07-10 13:00:42
供稿:网友
把图形文件名存入数据库中,这是vb.net数据库编程中处理图形的一种简单有效的方法。本文就介绍如何在vb.net中使用这种方法来设计windows和web图形据库程序。
关键词:vb.net,数据库,图形,windows程序,web程序。
随着多媒体技术的发展,图形数据库在实际应用中已经越来越广泛了。在vb.net数据库编程中处理图形的方法之一就是把图形作为数据库的一个字段存放到数据库中;第二个方法就是把图形的文件名作为一个字段保存到数据库中,而一张张图片则作为独立的文件放在数据库所在的文件夹中。第一个方法虽然可以较好地保护图形文件,但编写程序比较麻烦并有一定的难度;第二个方法则是处理图形的一种简易方法,也是本文要介绍的方法。
1:windows数据库程序中处理图形的简易方法
为了说明问题,我们先在access2000中创建一个数据库(假设其文件名是star.mdb),该数据库中有一个名为star的数据表,数据表的字段有:编号、姓名、性别、年龄、文件名。程序运行如图1所示,这里你不仅可以浏览记录,还可以编辑、添加、删除记录。由于在编辑和添加记录时要用到图形的文件名,所以,事先最好把图形的文件名与该记录的编号设成一样,这样,操作起来就更方便。
图1windows程序
图2 web程序
要实现图1所示的功能,我们可以这样来操作:
①:在vb.net中新建windows 应用程序;
②:从"工具箱"的"数据"选项卡中,将 oledbdataadapter拖放到窗体上,按屏幕提示建立好数据连接,配只置好数据适配器。
③:在窗体下面的oledbdataadapter1上单击鼠标右键并选择"生成数据集"。
此时在窗体的下面你可以看到三个在程序运行时是不可见的控件,它们分别是:oledbdataadapter1、oledbconnection1、dataset11,为了书写程序时方便,请把它们分别改名为:dba、dbc、ds1。
④:在窗体上添加文本框、图片框、命令按钮等控件,并把文本框与数据库中相应的字段进行绑定,绑定的方法是:在文本框上按f4,出现属性窗口,选择该窗口"数据"项目下的databindings中的text,此时你可以看到数据表中的所有字段,选择一个字段即可。
完成这些操作之后,我们就要编写代码来实现程序的功能。首先定义一个子程序(假设其名称是jth),其功能是显示当前记录对应的图片:
dim n as integer 'n表示当前记录的位置
sub jth() '自定义的子程序
n = me.bindingcontext(ds1, "star").position 'ds1是数据集的名称
dim str as string
str = "../" + ds1.tables(0).rows(n)("文件名") '文件名是数据库中的一个字段
picturebox1.image = image.fromfile(str)
end sub
窗体装载事件对应的程序是:
me.dbc.connectionstring = "provider=microsoft.jet.oledb.4.0;" & _
"data source=../star.mdb" '用代码指定数据库的连接
ds1.clear()
dba.fill(ds1, "star") '填充数据集
jth()
"下记录"命令按钮对应的代码是:
me.bindingcontext(ds1, "star").position += 1
jth()
"上记录" 命令按钮对应的代码是:
me.bindingcontext(ds1, "star").position -= 1;
jth()
"首记录" 命令按钮对应的代码是:
me.bindingcontext(ds1, "star").position = 0;
jth()
"末记录"命令按钮对应的代码是:
me.bindingcontext(ds1,"star").position=me.bindingcontext(ds1,"star").count- 1
jth()
"添加" 命令按钮对应的程序是:
try
me.bindingcontext(ds1, "star").endcurrentedit() '清除当前编辑内容
me.bindingcontext(ds1, "star").addnew()
picturebox1.image = nothing
catch eendedit as system.exception
system.windows.forms.messagebox.show(eendedit.message)
end try
"删除"命令按钮对应的程序是:
if (me.bindingcontext(ds1, "star").count > 0) then
me.bindingcontext(ds1, "star").removeat(me.bindingcontext(ds1, "star").position)
end if
添加和删除操作之后必须单击"更新"才能真正实现数据库的更新。"更新"命令按钮对应的程序是:
me.bindingcontext(ds1, "star").endcurrentedit()
dba.update(ds1, "star")
2:web数据库程序中图形简易处理的方法
在asp时代,我们可以使用visual interdev6.0来设计web程序。在asp.net正在向我们走来的时候,我们则可以使用vb.net来设计新一代的web程序(asp.net程序)。虽然可以使用文本编辑器(例如记事本)来编写asp.net脚本程序,但这种方法对程序人员要求很高,即使是编程高手也往往由于英语单词拼写有误在程序中出现难以查找的错误。利用vb.net来设计web程序具有代码少、自动查错等优点,这些优点对于web程序员来说无疑是一个福音。
图2所示的就是用vb.net设计的一个web程序。这个程序所用的数据库跟上一个程序完全一样。当浏览者单击某个人的姓名时就在右边显示他的照片,如果要查看其余的记录,则可以单击翻页链接。我们把姓名所在的那一列称为选择列。这种程序在网上很常见。要实现图2所示的功能,请先在vb.net新建一个asp.net web应用程序→把"工具箱""数据"选项卡中的oledbdataadapter拖动到窗体上,然后按屏幕提示配置数据适配器并生成数据集→在窗体上添加显示数据的datagrid,再在datagrid上单击鼠标右键并选择"属性生成器",出现图3所示的窗口。选择图3中的常规,把数据源设置为窗体中的数据集ds1;把数据成员设置为数据库中的数据表star;把数据键字段设置为数据库中的主键(在我们这个数据库中就是"编号"字段)。
图3 datagrid属性生成器
为了实现分页浏览记录的功能,请选择图3中的"分页",出现图4所示的窗口。请选择图4中的"允许分页"并确定好每页的大小(也就是每显示的行数,例如3行)。选择"显示导航按钮",把页导航的位置选择为"底",模式选择为"页码",把数值按钮(也就是在每每页中显示多少个页码链接)设置为一个适当的值,具体设置情况见图4所示。
图4 datagrid属性生成器中的分页功能
现在请选择图3中的"列",出现图5所示的窗口,请把"在运行时自动创建列"功能去掉,把"可用列"中的"编号"、"性别"、"年龄"添加到"选定的列"中。再把图5中"按钮列"中的"选择" 添加到"选定的列"中,然后在"文本字段"选择姓名字段,在"按钮类型"中选择"linkbutton",在"页眉文本"中输入"姓名",具体设置情况见图5所示。
最后,请在窗体上一个用来显示图片的image控件(注意是web窗体的image控件)。完成后就要编写代码来实现程序的功能,窗体装载事件中的代码是:
dbc.connectionstring = "provider=microsoft.jet.oledb.4.0;data source=" & _
server.mappath("star.mdb") ' dbc是数据连接的名称, star.mdb是数据库
dba.fill(ds1, "star") ' dba和ds1分别是数据适配器和数据集的名称,star是数据表
if not page.ispostback then
datagrid1.databind()
end if
这里的第一个语句是用来指定数据库连接用的,它可以解决数据库的路径问题。因为我们在配置数据适配器并建立数据连接时是按数据库的绝对路径来操作的,所以,当你把程序拷贝或发布到别的服务器(该机符合asp.net运行环境)上去运行的时候很可能就会出现找不到数据库的问题。为了避免这个问题,我们在窗体装载事件的代码中加入这个语句。但要注意把数据库与asp.net程序放在同一个web文件夹中。
为了响应datagrid的分页,我们要给datagrid1的pageindexchanged事件加入下列代码:
datagrid1.currentpageindex = e.newpageindex
datagrid1.databind()
image1.imageurl = nothing '这样翻页的时候就不会显示上一页中的图片
图5 datagrid属性生成器中的列功能
为了实现选择列的功能,我们还要给datagrid1的selectedindexchanged事件编写下列程序:
dim index as integer
index = datagrid1.selectedindex + (datagrid1.currentpageindex) * 3
dim fname as string
fname = ds1.tables(0).rows(index)("文件名")
image1.imageurl = fname
那么,这样一个程序能否在其它服务器上运行和调试呢?这是广大程序设计者非常关心的问题。要把程序拷贝到其它服务器上运行和调试,请先在本机上进行编译,其方法是:选择"文件"菜单中的"生成并浏览",这样就会在程序所在的web文件夹中的bin 目录下生成二个扩展名为dll的文件。如果仅仅是把程序拷贝到其它服务器上运行,则只要把扩展名为aspx的主文件、数据库文件以及bin文件夹一起拷贝到其它服务器的任何一个虚拟目录中(或web共享文件夹)就可以了。如果是把程序拷贝到其它服务器上去调试,则应该把所有相关的文件都拷贝过去,但虚拟目录的名称可以不一样。
从这里我们也可以看出:asp中烦人的数据库分页显示以及图形的显示问题,如果用vb.net来设计,那已经是一件很容易的事情了。
以上所有程序都在vb.net+windows 2000下调试通过。