VB6.0 调用存储过程的例子(方法二)

发表于:2007-06-30来源:作者:点击数: 标签:
本人推荐使用方法一来取存储过程,当然前提是知道将要使用的参数化命令的详细情况,通过在代码中创建参数,其执行的速度快。 如果不知道要使用的参数化命令,本人整理了一份通过使用参数(Parameters)对象来获取存储过程的记录集的内容,但该执行方式速度没
本人推荐使用方法一来取存储过程,当然前提是知道将要使用的参数化命令的详细情况,通过在代码中创建参数,其执行的速度快。



如果不知道要使用的参数化命令,本人整理了一份通过使用参数(Parameters)对象来获取存储过程的记录集的内容,但该执行方式速度没有方法一理想。



代码整理如下,你可以直接将该代码Copy到Form1窗体中进行调试。

其中函数GetDataType可以修改为自己所需的处理方式,在这里所有的代码都是为了测试方便所有,你也可以改为自己所需的相应处理。



Sub CreateParms()

Dim ADOCmd As New ADODB.Command

Dim ADOPrm As New ADODB.Parameter

Dim ADOCon As ADODB.Connection

Dim ADORs As ADODB.Recordset

Dim strConnect As String

Dim strFieldName As String



Dim i As Integer



strConnect = "driver={SQL Server};server=(local);uid=sa;pwd=;database=pubs"

Set ADOCon = New ADODB.Connection

With ADOCon

.Provider = "MSDASQL"

.CursorLocation = adUseServer @#Must use Server side cursor.

.ConnectionString = strConnect

.Open

End With



Set ADOCmd.ActiveConnection = ADOCon

With ADOCmd

.CommandType = adCmdStoredProc

.CommandText = "ADOTestRPE"



.Parameters.Refresh @# 指定ADO实际地与数据源相连

End With



@# 通过Parameters对象,填充输入参数

For Each ADOPrm In ADOCmd.Parameters

If ADOPrm.Direction = adParamInput Then



ErrDataType:

On Error Resume Next

ADOPrm.Value = InputBox("存储过程参数名称:" & ADOPrm.Name & vbCrLf & _

"该参数数据类型:" & GetDataType(ADOPrm.Type), "请输入参数值", "")

If Err <> 0 Then

If MsgBox("所输入的参数与该参数数据类型不符,请重新输入!取消将退出存储过程的调用!", vbOKCancel, "警告") = vbCancel Then

Exit Sub

End If

Err.Clear

GoTo ErrDataType

End If

On Error GoTo 0



End If

Next



On Error GoTo ErrHandler

Set ADORs = ADOCmd.Execute



If Not (ADORs Is Nothing) Then

If Not ADORs.EOF Then

Do Until ADORs.EOF

For i = 0 To ADORs.Fields.Count - 1

strFieldName = ADORs.Fields(i).Name

Debug.Print "" & ADORs(strFieldName) & Space(4)

Next

Debug.Print



ADORs.MoveNext

Loop

End If

End If





ErrHandler:

Call ErrHandler(ADOCon)

Resume Next



Shutdown:

Set ADOCmd = Nothing

Set ADOPrm = Nothing

Set ADORs = Nothing

Set ADOCon = Nothing

End Sub



Private Sub Command1_Click()

Call CreateParms

End Sub



Sub ErrHandler(objCon As Object)

Dim ADOErr As ADODB.Error

Dim strError As String



For Each ADOErr In objCon.Errors

strError = "Error #" & ADOErr.Number & vbCrLf & ADOErr.Description _

& vbCr & _

" (Source: " & ADOErr.Source & ")" & vbCr & _

" (SQL State: " & ADOErr.SQLState & ")" & vbCr & _

" (NativeError: " & ADOErr.NativeError & ")" & vbCr

If ADOErr.HelpFile = "" Then

strError = strError & " No Help file available" & vbCr & vbCr

Else

strError = strError & " (HelpFile: " & ADOErr.HelpFile & ")" _

& vbCr & " (HelpContext: " & ADOErr.HelpContext & ")" & _

vbCr & vbCr

End If



@# Debug.Print strError

MsgBox strError

Next



objCon.Errors.Clear

End Sub



Function GetDataType(ByRef DataType As DataTypeEnum) As String

Select Case DataType

Case DataTypeEnum.adArray

GetDataType = "DataTypeEnum.adArray"

Case DataTypeEnum.adBigInt

GetDataType = "DataTypeEnum.adBigInt"

Case DataTypeEnum.adBinary

GetDataType = "DataTypeEnum.adBinary"

Case DataTypeEnum.adBoolean

GetDataType = "DataTypeEnum.adBoolean"

Case DataTypeEnum.adBSTR

GetDataType = "DataTypeEnum.adBSTR"

Case DataTypeEnum.adChapter

GetDataType = "DataTypeEnum.adChapter"

Case DataTypeEnum.adChar

GetDataType = "DataTypeEnum.adChar"

Case DataTypeEnum.adCurrency

GetDataType = "DataTypeEnum.adCurrency"

Case DataTypeEnum.adDate

GetDataType = "DataTypeEnum.adDate"

Case DataTypeEnum.adDBDate

GetDataType = "DataTypeEnum.adDBDate"

Case DataTypeEnum.adDBTime

GetDataType = "DataTypeEnum.adDBTime"

Case DataTypeEnum.adDBTimeStamp

GetDataType = "DataTypeEnum.adDBTimeStamp"

Case DataTypeEnum.adDecimal

GetDataType = "DataTypeEnum.adDecimal"

Case DataTypeEnum.adDouble

GetDataType = "DataTypeEnum.adDouble"

Case DataTypeEnum.adEmpty

GetDataType = "DataTypeEnum.adEmpty"

Case DataTypeEnum.adError

GetDataType = "DataTypeEnum.adError """

Case DataTypeEnum.adFileTime

GetDataType = "DataTypeEnum.adFileTime """

Case DataTypeEnum.adGUID

GetDataType = "DataTypeEnum.adGUID"

Case DataTypeEnum.adIDispatch

GetDataType = "DataTypeEnum.adIDispatch"

Case DataTypeEnum.adInteger

GetDataType = "DataTypeEnum.adInteger"

Case DataTypeEnum.adIUnknown

GetDataType = "DataTypeEnum.adIUnknown"

Case DataTypeEnum.adLongVarBinary

GetDataType = "DataTypeEnum.adLongVarBinary"

Case DataTypeEnum.adLongVarChar

GetDataType = "DataTypeEnum.adLongVarChar"

Case DataTypeEnum.adLongVarWChar

GetDataType = "DataTypeEnum.adLongVarWChar"

Case DataTypeEnum.adNumeric

GetDataType = "DataTypeEnum.adNumeric"

Case DataTypeEnum.adPropVariant

GetDataType = "DataTypeEnum.adPropVariant"

Case DataTypeEnum.adSingle

GetDataType = "DataTypeEnum.adSingle"

Case DataTypeEnum.adSmallInt

GetDataType = "DataTypeEnum.adSmallInt"

Case DataTypeEnum.adTinyInt

GetDataType = "DataTypeEnum.adTinyInt"

Case DataTypeEnum.adUnsignedBigInt

GetDataType = "DataTypeEnum.adUnsignedBigInt"

Case DataTypeEnum.adUnsignedInt

GetDataType = "DataTypeEnum.adUnsignedInt"

Case DataTypeEnum.adUnsignedSmallInt

GetDataType = "DataTypeEnum.adUnsignedSmallInt"

Case DataTypeEnum.adUnsignedTinyInt

GetDataType = "DataTypeEnum.adUnsignedTinyInt"

Case DataTypeEnum.adUserDefined

GetDataType = "DataTypeEnum.adUserDefined"

Case DataTypeEnum.adVarBinary

GetDataType = "DataTypeEnum.adVarBinary"

Case DataTypeEnum.adVarChar

GetDataType = "DataTypeEnum.adVarChar"

Case DataTypeEnum.adVariant

GetDataType = "DataTypeEnum.adVariant"

Case DataTypeEnum.adVarNumeric

GetDataType = "DataTypeEnum.adVarNumeric"

Case DataTypeEnum.adVarWChar

GetDataType = "DataTypeEnum.adVarWChar"

Case DataTypeEnum.adWChar

GetDataType = "DataTypeEnum.adWChar"

Case Else

GetDataType = "无法获取数据类型"

End Select

End Function

原文转自:http://www.ltesting.net