很多朋友在开发的时候都会与SQL Server打交道,但使用SQL存储过程的却不多。其实好的存储过程可以提供更好的性能,所以我个人的观点是尽量将数据分析、处理的任务交给存储过程完成,而业务上的处理由客户端程序完成。
下面我就把VB6与SQL存储过程应用的一点心得与大家共享。
假如我们有一个这样的存储过程:
CREATE procedure Test
@InValue varchar(50)
as
declare @R int
SET NOCOUNT ON
if @InValue='Y'
select @R=1
else
select @R=0
return @R
GO
(关于存储过程的建立请大家参见其它文章)。
在VB6中使用存储过程其实很简单,我们需要的东西和普通处理数据时候是一样的。
我们需要一个数据连接Adodb.Connection,一个数据命令Adodb.Command,一个参数对象ADODB.Parameter
如果需要得到返回记录的话就再加一个RecordSet
Dim Conn As New Adodb.Connection
Dim Cmd As New Adodb.Command
Dim Par As ADODB.Parameter
Dim RS As New RecordSet
现在建立连接:
Conn.Open "Provider=MSDASQL;Driver={SQL Server};" & _
"uid=User;pwd=123;database=MyDB;Server=192.168.0.1"
接下来很重要,要设置Command类型为存储过程
Cmd.CommandType=adCmdStoredProc
好了,现在设置Command的数据连接
Set Cmd.ActiveConnection=Conn
以上这些步骤相信了解ADO的朋友都知道,接下来的就是如何执行并取得返回值了。
首先设置数据命令中的参数(注意!存储过程中有几个参数就要定义几个参数,不要多也不要少)
现在设置用于得到存储过程中Return @R 返回值的参数,名字可以随便起
要注意的是adInteger表示参数是Integer类型,adParamReturnValue表示为返回参数。
Set par = Cmd.CreateParameter("RetVal", adInteger, adParamReturnValue)
Cmd.Parameters.Append par
接下来设置存储过程中@InValue 参数,名字可以随便起,但最好用与存储过程中同样的名字
要注意的是adChar表示参数是Char类型,adParamlnput表示为输入参数,20表示长度,"Y"表示参数值。
Set par = Cmd.CreateParameter("InValue", adChar, adParamInput, 20, "Y")
Cmd.Parameters.Append par
现在参数已经设置完成了,接下来执行SQL吧
Cmd.CommandText = "Test"
Set DS=Cmd.Execute
OK,运行完了,现在看看结果吧
MsgBox Cmd.Parameters("RetVal").Value
最后别忘了关闭连接以及释放资源。
Conn.Close
Set Cmd=Nothing
Set Conn=Nothing
Set DS=Noting
至此我们就完成了一个简单的存储过程的调用,下面补充一点经验
1。返回参数可有可无,根据需要决定,但是如果使用的时候最好放在Command第一位设置。
2。应该按照与存储过程中的参数顺序定义Command参数。
3。如果不希望获得返回值也可以直接在CommandText中写入参数,例如Cmd.CommandText="Test 'Y'"
4。文章里面没写关于OutPut参数返回值得获得,实现方法就是在添加一个Command参数属性为adParamOutput,就可以了,这个给你留个发挥空间,我就不写了:-)