vb调用sql存储过程:VB实现SQL Server 2000存储过程调用

  摘要:本文以SQL Server2000存储过程为例探讨了存储过程优点并以Visual Basic6.0设计语言给出了存储过程关键代码

  关键字:数据库;SQL Server2000;存储过程;应用;VB

  存储过程

  存储过程是存储在服务器上组预编译Transact-SQL语句种封装重复任务操作思路方法支持用户提供变量具有强大编程功能它类似于DOS系统中BAT文件在BAT文件中可以包含组经常执行命令这组命令通过BAT文件执行而被执行同样道理可以把要完成某项任务许多Transact-SQL语句写在组织成存储过程形式通过执行该存储过程就可以完成这项任务存储过程和BAT文件又有差别即存储过程已经进行了预编译

  1、创建存储过程思路方法

  在Transact-SQL语言中创建存储过程可以使用CREATE PROCEDURE语句其语法形式如下:

  CREATE PROC[EDURE] procedure_name[;number]
[{@parameter data_type}[VARYING][=default][OUTPUT]
]],…n]
[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement[…n]


  在上面CREATE PROCEDURE语句中方括号"[ ]"中内容是可选花括号"{}"中内容是必须出现不能省略[…n]表示前面参数样式可以重复出现竖线"|"表示两边选项可以任选

  下面分析该语句中各种选项含义

  CREATE PROCEDURE是关键字也可以写成CREATE PROC

  procedure_name是该存储过程名称名称可以是任何符合命名规则标示符名称后[;number]参数表示可以定义系列存储过程名称这些存储过程数量由number指定

  参数名称可以使用@parameter data_type来指定在Transact-SQL语言中用户定义参数名称前面加"@"符号这些数据类型是Transact-SQL语言允许各种数据类型包括系统提供数据类型和用户定义数据类型

  当参数类型为cursor时必须使用关键字VARYING和OUTPUTVARYING表示结果集可以是个输出参数其内容是动态该关键字只能在使用游标作为数据类型时使用关键字OUTPUT表示这是个输出参数可以把存储过程执行结果信息返回应用

  default用于指定参数默认值

  RECOMPILE选项表示重新编译该存储过程该选项只是在需要时候才使用例如经常需要改变数据库模式时

  ENCRYPTION选项用来加密创建存储过程文本防止他人查看

  选项FOR REPLICATION主要用于复制过程中注意该选项不能和选项RECOMPILE同时使用

  AS是个关键字表示其后内容是存储过程语句参数sql-statement[…n]表示在个存储过程中可以包含多个Transact-SQL语句

  2、存储过程优点

  在频繁访问数据库系统中开发者都乐于使用存储过程这和存储过程下列优点是分不开

  ⑴ 存储过程可以和其他应用共享应用逻辑从而确保数据访问和操纵

  ⑵ 存储过程提供了种安全机制如果用户被授予执行存储过程权限那么即使该用户没有访问在执行该存储过程中所参考表或视图权限该用户也可以完全执行该存储过程而不受到影响因此可以创建存储过程来完成所有增加、删除等操作并且可以通过编程控制上述操作中对信息访问权限

  ⑶ 存储过程执行速度快便于提高系统性能由于存储过程在第次执行的后其执行规划就驻存在过程高速缓冲存储区中在以后操作中只需从过程高速缓冲存储区中编译好 2进制形式存储过程来执行

  ⑷ 使用存储过程可以减少网络传输时间如果有千条Transact-SQL语句命令条地通过网络在客户机和服务器的间传送那么这种传输所耗费时间将很长但是如果把这千条Transact-SQL语句命令写成条较为复杂存储过程命令这时在客户机和服务器的间网络传输所需时间就会大大减少

  SQL Server 2000数据库存储过程

  VB作为当今应用极为普遍数据库客户端开发工具的对客户端应用服务器端存储过程提供了强大支持特别是随着VB6.0推出VB客户端应用可以方便地利用ADO对象和集合来实现对数据库存储过程

  在笔者编写科技档案管理系统中就是采用VB作为开发平台采用SQL Server2000数据库管理数据在这个科技档案管理系统中有海量数据并且对数据库有频繁访问利用存储过程访问数据库节省了执行时间大大提高了系统性能

  1、ADO介绍

  ADOControl控件(也称为ADO DataControl控件)和VB固有DataControl控件相似使用ADO DataControl控件可以利用Microsoft ActiveX Data Objects(ADO)快速建立数据库绑定Control控件和数据提供者的间连接

  ADO DataControl控件可以实现以下功能:

  ·连接个本地数据库或远程数据库

  ·打开个指定数据库表或定义个基于结构化查询语言(SQL)查询、存储过程或该数据库中视图记录集合

  ·将数据字段数值传递给数据绑定Control控件可以在这些Control控件中显示或更改这些数值

  ·添加新记录或根据更改显示在绑定Control控件中数据来更新个数据库

  2、数据库连接

  数据库连接可通过ADOControl控件实现为此必须在工程部件中选择Microsoft ADO Data Control 6.0 (OLEDB)然后在窗体中添加ADOControl控件利用ADO连接数据库有两种思路方法具体如下

  1) 通过ADODC属性页实现连接

  在ADODC属性页中选择生成按钮进入数据链接属性对话框;然后选择该对话框中连接属性页选择或输入服务器名称和数据库等重要信息;最后测试连接连接成功后按确定按钮返回到属性页对话框可获得连接如下例:

  Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Science_File;Data Source=Data_Server

  其中sa是用户名;Science_File是数据库名;Data_Server是数据库名

  通过下列语句即可连接到指定数据库:

  dim odbcstr as String, adocon As New ADODB.Connection
odbcstr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Science_File;Data Source=Data_Server"
adocon.Open odbcstr '连接到数据库


  2) 直接使用连接语句实现

  连接数据库语句如下:

  Dim ado as ADODC
ado.ConnectionString = "Provider=SQLOLEDB.1;Password=" & User_Pwd & ";Persist Security Info=True;User ID=" & User_Name & ";Initial Catalog=" & Data_Name & ";Data Source=" & server_name


  其中User-Pwd是用户密码;User_Name是用户名;Data_Name是数据库名;server_name是服务器名

  连接数据库成功后就可以存储过程执行操作

  3、存储过程

  假设有个名为doc_ProcName存储过程该存储过程有个输入参数个输出参数

  1) 直接传递参数存储过程

  直接传递参数思路方法主要通过以下几个步骤来实现:

  (1) 通过ADODBConnection对象打开和数据源连接;

  (2) 通过ActiveConnection指定Command对象当前所属Connection对象;

  (3) 通过CommandText属性设置Command对象即要存储过程;

  (4) 通过CommandType属性确定Command对象源类型如果源类型为存储过程CommandType即为adCmdStoredProc;

  (5) 通过Command对象Parameters集合向所存储过程传递参数其中对象Parameters(0)为执行存储过程返回值返回值为0则执行存储过程成功;

  (6) 通过Eexecute思路方法执行在 CommandText 属性中指定存储过程

  以存储过程doc_ProcName为例关键代码如下:

  Dim strS As String '定义变量
Dim adoconn As New ADODB.Connection 'Connection 对象代表了打开和数据源连接
Dim adocomm As New ADODB.Command 'Command 对象定义了将对数据源执行指定命令
Dim ReturnValue As Integer '存储过程返回值
adoconn.ConnectionString = Adodc1.ConnectionString 'Adodc1为窗体中ADOControl控件并已成功连接数据库
adoconn.Open
Set adocomm.ActiveConnection = adoconn '指示指定 Command对象当前所属 Connection对象
adocomm.CommandText = "doc_ProcName" '设置Command对象源
adocomm.CommandType = adCmdStoredProc '通知提供者CommandText属性有什么它可能包括Command对象源类型设置这个属性优化了该命令执行
adocomm.Parameters(1) = "1"
adocomm.Parameters(2) = "OutputParameters" 'OutputParameters可以为任意串或数字
adocomm.Execute
ReturnValue = adocomm.Parameters(0) '存储过程返回值返回0则成功执行
strS = adocomm.Parameters(2) '把存储过程输出参数值赋给变量strS


  2) 追加参数法存储过程

  追加参数通过CreateParameter思路方法用来指定属性创建新Parameter对象具体语法如下:

  Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)

  ·Name 可选代表 Parameter 对象名称

  ·Type 可选长整型值指定 Parameter 对象数据类型

  ·Direction 可选长整型值指定 Parameter 对象类型

  ·Size 可选长整型值指定参数值最大长度(以或字节数为单位)

  ·Value 可选变体型指定 Parameter 对象值

  这种思路方法和上面种思路方法分别主要在于追加参数思路方法在向存储过程传递参数时这种思路方法首先通过CreateParameter思路方法为存储过程创建参数然后通过Append思路方法将创建参数追加到Parameters集合中去

  仍然以存储过程doc_ProcName为例关键代码如下:

  Dim mRst As ADODB.Record 'Record 对象表示是来自基本表或命令执行结果记录全集
Dim prm As ADODB.Parameter 'Parameter 对象代表参数或和基于参数化查询或存储过程Command 对象相关联参数
adoconn.ConnectionString = Adodc1.ConnectionString
adoconn.Open
Set adocomm.ActiveConnection = adoconn
adocomm.CommandText = "doc_ProcName"
adocomm.CommandType = adCmdStoredProc
Set prm = adocomm.CreateParameter("parameter1", adTinyInt, adParamInput, , "1")
adocomm.Parameters.Append prm
Set prm = adocomm.CreateParameter("parameter2", adInteger, adParamOutput)
adocomm.Parameters.Append prm
Set mRst = adocomm.Execute
ReturnValue = adocomm.Parameters(0)




  以上代码中未定义变量以及未注释语句和前述相同

  结束语

  在应用服务器端存储过程不仅能显著提高整个应用性能而且能加强对数据库数据保护VB为客户端应用存储过程提供了组方便而有效思路方法



Tags:  vbsqlserver sql调用存储过程 vb调用存储过程 vb调用sql存储过程

延伸阅读

最新评论

发表评论