Dim myconn As New ADODB.Connection
            Dim mycmd As New ADODB.Command
            myconn.ConnectionString = cnctstr ‘连接字符串
            myconn.Open
            mycmd.ActiveConnection = myconn
            Dim myset As New ADODB.Recordset
            myset.ActiveConnection = myconn            myset.Open ("select * from sysobjects where                 name='w_exist_yy' and type='p'")            If myset.BOF = True And myset.EOF = True Then ‘新还原的数据库有w_exist_yy存储过程不执行这里                mycmd.CommandType = adCmdText
                Dim s As String
                s = " create procedure w_exist_yy" _
                    & " @reg char(1) = '0' output," _
                    & " @partname char(256) ='' output," _
                    & " @autotime int =0 output,@netcardno char(20) output," _
                    & " @limittime int =200," _
                    & " @limitcount int =2000" _
                    & " With recompile" _
                    & " as" _
                    & " set @netcardno='false'" _
                    & " set @partname='图书馆'" _
                    & " set @autotime=1" _
                    & "set @reg='2'"
                mycmd.CommandText = s
                mycmd.Execute
            End If
            mycmd.CommandType = adCmdStoredProc
            mycmd.CommandText = "w_exist_yy"
            '请重点解释以下 
            Dim reg As New ADODB.Parameter
            
            reg.Size = 1
            reg.Type = adChar
            reg.Name = "@reg"
            reg.Direction = adParamOutput '什么意思
            
            
            
            mycmd.Parameters.Append reg '什么意思?
            mycmd.Execute
            regs = CInt(reg.Value) ’重点是reg的值是如何得到的?

解决方案 »

  1.   

    数据库里的存储过程是  以下这样的
    我也刚学存储过程,请详细些解释 谢谢!!        Dim sql1 As String
            Dim sql2 As String
            sql1 = " create procedure w_exist_yy" _
                           & " @reg char(1) = '0' output," _
                           & " @partname char(256) ='' output," _
                           & " @autotime int =0 output,@netcardno char(20) output," _
                           & " @limittime int =200," _
                           & " @limitcount int =2000 " _
                           & " With encryption" _
                           & " as" _
                           & " set @netcardno='" & netno & "'" _
                           & " set @partname='" & partname & "'" _
                           & " set @autotime=0" _
                           & " create table #tb1(re varchar(255))" _
                         & " insert into #tb1 exec master..xp_cmdshell 'ipconfig /all'" _
                         & " declare @ss char(20)" _
          & " set @ss= (select top 1 substring(re,charindex(':',re)+1,255) as ids from #tb1 where re like '%Physical Address. . . . . . . . . :%' )" _
         & " if len(rtrim(ltrim(@ss)))>1  set @ss= substring(@ss,2,17) else set @ss ='11-11-11-11-11-11'" _
                         & " if @netcardno=@ss" _
                         & " begin" _
                         & " set @reg='1'" _
                         & " Return" _
                         & " end" _
                         & " else " _
                         & "    begin" _
                        & "       if @autotime>=@limittime"
                sql2 = " begin" _
                       & " set @reg=3 " _
                       & " Return" _
                       & "  End" _
                       & "   if (select count(id) from yjs_wxmain)>= @limitcount" _
                       & "   begin" _
                       & "   set @reg=4" _
                       & "  Return" _
                       & "    End" _
                       & "   set @reg=2 /*未注册,但可用*/" _
                       & "  End"
                       
        mycmd.CommandText = sql1 + sql2
      

  2.   

    数据库是我刚还原的。
    我就是不明白在哪里存储着 reg.value的值呢 ??
      

  3.   

    是不是 不运行该存储过程 就可以取出得@reg 呢 ?
    是这样吧
      

  4.   

    这是添加一个带返回值的存储过程并执行它的程序//reg.Direction = adParamOutput '什么意思
    reg代表存储过程的参数
    adParamOutput 代表是返回值//mycmd.Parameters.Append reg '
    给存储过程传递参数
    //reg.value
    返回的是存储过程中的参数
    @reg char(1) = '0' output
      

  5.   

    谢谢楼上
    //reg.value
    返回的是存储过程中的参数
    @reg char(1) = '0' output
     
    我觉得是返回 & "   set @reg=2 /*未注册,但可用*/" _     2这个值吧
      

  6.   

    这样创建存储过程有点担心,我的存储过程大的有几百行代码,用这个方法要连接几十个String变量了,不是很方便。
    可以用用执行脚本的方法。