选择显示字体大小

vb中调用带参数存储过程的实现


  vb做为快速应用开发(rad)工具越来越得到开发人员的认可和接受。它对许多api(如odbc api、socket api等等)的封装使得编程变得简单起来。同时,它支持集成开发环境下的可视化、事件驱动、面向对象等编程特点。下面,我们谈谈在vb中调用存储过程的实现方法及其注意事项。

---- 我们知道,vb数据库编程有许多种方法,比如直接用odbc api编程,这种方法灵活、高效,程序员可以实现对数据库复杂的控制;也可以用vb中的数据对象,如rdo(远程数据对象)、dao(数据访问对象)、ado(activex 数据对象),这种方法实现起来方便、快捷,但灵活性较差一些。由于存储过程在实现数据封装、隐藏以及代码的预编译、减少网络负载、维护方便等优点,所以被许多rdbms和编程工具做支持。vb中的各类数据对象也提供对存储过程的支持。

---- 我们以ado为例来说明其实现的步骤

---- 1. 创建、调试存储过程。你可以在数据库中也可以在其他外挂程序的支持下进行存储过程的创建和调试工作。本例中的存储过程代码如下(使用pubs的ms sql中的例子库 ):

create procedure myprocedure
@job_id smallint,
@job_lvl tinyint
as
select *
from employee
where job_id < @job_id
and job_lvl > @job_lvl

---- 2. 在vb中生成一个新的工程,工程有一窗体,一个command(name:command1) 按钮,一个 msflexgrid(name:msflexgrid1)控件。

---- 3. 创建连接ado connection;

---- 4. 创建命令ado command;

---- 5. 创建参数并设置各个参数的属性;

---- 6. 执行ado command;

---- 7. 对数据进行处理;msflexgrid显示查询到的数据

---- 8. 释放连接,退出程序。

---- 其中代码如下:

在窗体中声明以下变量:
dim cnn1 as adodb.connection ‘连接
dim mycommand as adodb.command ‘命令
dim parm_jobid as adodb.parameter ‘参数1
dim parm_joblvl as adodb.parameter ‘参数2
dim rstbyquery as adodb.recordset ‘结果集
dim strcnn as string ‘连接字符串

在窗体的load事件中加入如下代码:
set cnn1 = new adodb.connection
‘生成一个连接
strcnn = "dsn=mydsn;uid=sa;pwd="
‘创建的系统数据源mydsn指向pubs数据库
cnn1.open strcnn ‘打开连接
在窗体的unload中的加入代码如下:
cnn1.close ‘关闭连接
set cnn1 = nothing ‘释放连接

在按钮中的代码如下:
dim i as integer
dim j as integer
set parm_jobid = new adodb.parameter
set mycommand = new adodb.command
' parm_jobid.name = "name1"
this line can be ommited
parm_jobid.type = adinteger ‘参数类型
parm_jobid.size = 3 ‘参数长度
parm_jobid.direction = adparaminput
‘参数方向,输入或输出
parm_jobid.value = 100 ‘参数的值
mycommand.parameters.append
parm_jobid ‘加入参数


set parm_joblvl = new adodb.parameter
‘parm_joblvl.name = "name2"
parm_joblvl.type = adinteger
parm_joblvl.size = 3
parm_joblvl.direction = adparaminput
mycommand.value = 100
mycommand.parameters.append parm_joblvl


mycommand.activeconnection = cnn1
‘指定该command 的当前活动连接
mycommand.commandtext = " myprocedure "
‘myprocedure 是你要调用的存储过程名称
mycommand.commandtype = adcmdstoredproc
‘表明command 为存储过程
set rstbyquery = new adodb.recordset
set rstbyquery = mycommand.execute()
i = 0
do while not rstbyquery.eof
i = i + 1 ‘ i 中保存记录个数
rstbyquery.movenext
loop
msflexgrid1.rows = i + 1
‘动态设置msflexgrid的行和列
msflexgrid1.cols = rstbyquery.fields.count + 1
msflexgrid1.row = 0
for i = 0 to rstbyquery.fields.count - 1
msflexgrid1.col = i + 1
msflexgrid1.text = rstbyquery.fields.item(i).name
next ‘设置第一行的标题,用域名填充

i = 0
set rstbyquery = mycommand.execute()
do while not rstbyquery.eof
i = i + 1
msflexgrid1.row = i ‘确定行
for j = 0 to rstbyquery.fields.count - 1
msflexgrid1.col = j + 1
msflexgrid1.text = rstbyquery (j)
‘添充所有的列
next
rstbyquery.movenext

loop ‘这个循环用来填充msflexgrid的内容

---- 特殊说明

---- 1. set recordset = command.execute( recordsaffected, parameters, options ) command.execute recordsaffected, parameters, options 这是command的两种用法,一种有返回结果集,一种没有返回结果集。

---- recordsaffected:是指用update、delete操作时所影响的结果,对select的查询,其值为-1;这和在ms sql server 中的query analyzer中的不一样。query analyzer中,select、update、delete的结果显示的是实际查、改、删的记录数。

---- options:指明command的类型,有adcmdtext、adcmdtable、adcmdstoredproc等等,用户可见msdn。

---- 2.在参数的类型中,用户可以用varchar来代替integer,系统会帮你自动实施转化;

---- 3.本例中仅为带输入参数的存储过程,如果要有输出参数,根据msdn的材料,用ado不行。你可以用rdo数据对象,msdn中有一个例子,此处不做过多赘述;

---- 4.可以不用ado command对象,也可直接调用ado connection的execute方法,结果很类似。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons