您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VB >> 真题 >> 正文    
  VB中调用带参数存储过程的实现 【注册男护士专用博客】          

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

www.nanhushi.com     佚名   不详 

  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方法,结果很类似。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    VB中调用带参数存储过程…
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。