在vb里怎么得到存储过程的返回值,还有怎么带参数 最好有例子

bjdahai 2002-01-22 09:32:05
...全文
149 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chsl918 2002-01-23
  • 打赏
  • 举报
回复
哈哈,当时我遇到这个问题的时候也是特别郁闷!!不过你就比较幸福了因为我有全部的代码!!这个是调用ETL_ODS_TO_RB存储过程,参数5是个返回值(返回错误信息的)!另外这里用时间参数的传递所以运行代码的开始是进行时间的格式化!执行存储过程后面是一些错误处理。有问题可以给我发mail:chsl@cattsoft.com
首先是声明代码:

Public cmd As New ADODB.Command
Public param As New ADODB.Parameter
Public Con As New ADODB.Connection

然后是运行代码,
Private Function Int_Etl_Ods_To_Rb(dEnd_date As Date, _
dtGenDate As Date) As String
'******************************************************************
'目的:调用Etl_Ods_To_Rb过程,进行RB数据库的初始化
'输入: i_dtEndTime 抽取的结束日期,这个日期为系统日期
' i_dtGenDate 抽取的生成时间,这个时间为调用本过程的时间,精确到秒
'记录:日期: 作者: 修改注释:
' 2001/6/45 陈颂雷 开始编写
'******************************************************************
Dim vEnd_Date As String
Dim vGenDate As String
Dim o_vcErrm As String
Set cmd = New ADODB.Command
MainFrom.Caption = "正在进行RB初始化抽取!"
vEnd_Date = Format(dEnd_date, "YYYY")
vEnd_Date = vEnd_Date & "/" & Format(dEnd_date, "MM")
vEnd_Date = vEnd_Date & "/" & Format(dEnd_date, "DD")
vGenDate = Year(dtGenDate) & "/"
If Month(dtGenDate) < 10 Then
vGenDate = vGenDate & "0" & Month(dtGenDate) & "/"
Else
vGenDate = vGenDate & Month(dtGenDate) & "/"
End If
If Day(dtGenDate) < 10 Then
vGenDate = vGenDate & "0" & Day(dtGenDate)
Else
vGenDate = vGenDate & Day(dtGenDate)
End If
If Hour(dtGenDate) < 10 Then
vGenDate = vGenDate & "0" & Hour(dtGenDate)
Else
vGenDate = vGenDate & Hour(dtGenDate)
End If
If Minute(dtGenDate) < 10 Then
vGenDate = vGenDate & "0" & Minute(dtGenDate)
Else
vGenDate = vGenDate & Minute(dtGenDate)
End If
If Second(dtGenDate) < 10 Then
vGenDate = vGenDate & "0" & Second(dtGenDate)
Else
vGenDate = vGenDate & Second(dtGenDate)
End If
'进行调用
cmd.ActiveConnection = "Provider=MSDASQL.1;Persist Security Info=False;User ID=DW_ETL;PWD=DW_ETL;Data Source=EXTRACT"


cmd.CommandType = adCmdStoredProc
'下面这句定义超时时间,我的程序运行时间超长所以要定义下面这句
cmd.CommandTimeout = 200000

cmd.CommandText = "ETL_ODS_TO_RB"

'第一个参数
Set param = cmd.CreateParameter("i_cOprType", adChar, adParamInput, 20, "INIT")

cmd.Parameters.Append param

param.Value = "INIT"
'第二个参数
Set param = cmd.CreateParameter("iSubID", adInteger, adParamInput, 20, 1)

cmd.Parameters.Append param

param.Value = 1
'第三个参数
Set param = cmd.CreateParameter("i_dEnd_date", adChar, adParamInput, 10, vEnd_Date)

cmd.Parameters.Append param

param.Value = vEnd_Date
'第四个参数
Set param = cmd.CreateParameter("i_dtGenDate", adChar, adParamInput, 20, vGenDate)

cmd.Parameters.Append param

param.Value = vGenDate
'第五个参数
Set param = cmd.CreateParameter("o_vcErrm", adChar, adParamOutput, 2000, o_vcErrm)

cmd.Parameters.Append param

DoEvents

cmd.Execute

If Not IsNull(cmd(4)) Then
Int_Etl_Ods_To_Rb = cmd(4)
ErrorFlag = False
Else
Int_Etl_Ods_To_Rb = ""
End If
Set cmd = Nothing
End Function
lily0000000 2002-01-23
  • 打赏
  • 举报
回复
cnn_Log.Execute "CREATE PROCEDURE LogStoredProcedure (@stID int) As select * from 日志表 where 频道id=@stid return "

这是一个创建日志库存储过程的例子,你看看吧,或许会有启发。return哦。
@stID是自己设置的参数,int是其类型,as后是存储过程内容代码。
acptvb 2002-01-22
  • 打赏
  • 举报
回复
感谢您使用微软产品。

关于在VB中调用存储过程的方法,您可以参考以下文档:

Q194792 - HOWTO: Retrieve Values in SQL Server Stored Procedures w/ ADO
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q194792


- 微软全球技术中心 VB技术支持

立即参加微软认证的“最有价值专家”评选,赢取价值万元以上的丰富奖品!详情参见(http://www.csdn.net/expert/Topic/456/456919.shtm)

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
zhoushaoj 2002-01-22
  • 打赏
  • 举报
回复
vb怎么调用存储过程?

743

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧