我在后台定义了一个存储过程,现在程序中COMMAND对象调用,可当我只是初始化完COMMAND,还未对其中的输入参数进行赋值时,Parameters 中就已经有8个参数,一个为返回参数,剩余7个为输入参数,但没有具体的值。
初始化代码:
set comd = NEW ADODB.COMMAND 
With comd
 .ActiveConnection = Conn.Connector
 .CommandType = adCmdStoredProc
 .CommandText = "Proc_create_server"
 End With 
换别的存储过程不会出现这样的问题, 请各位大虾赐教,谢谢,在线等........

解决方案 »

  1.   

    参考
    http://blog.csdn.net/online/archive/2004/08/05/66376.aspx
      

  2.   

    我的写法和里面介绍的方法差不多,关键的问题是当程序执行完
    comd.commandtext="proc_create_server"
    后还没等我往里添加参数comd.parameters 中就已经有8个变量了。
    这让我很困惑,还劳烦各位再指条明路,谢谢~~!!!
      

  3.   

    ??
    后还没等我往里添加参数comd.parameters 中就已经有8个变量了。是啊,然后你赋值啊
      

  4.   

    可是存储过程只需要7个参数,而且这8个参数似乎是系统强加给我的,并不是我所希望的。
    以往调用过程时初始化完COMMAND对象实例后 COMMAND的Parameters集合都是空的。
    请问这是怎么回事??谢谢。
      

  5.   

    /*========================存储过程=========================*/
    CREATE PROCEDURE Proc_Create_Server
    @Department varchar(50),@Name varchar(100),@Program varchar(1000),@Information text,@Law varchar(200) ,@Acceptance AS varchar(50),@Departmentid varchar(50)
    as
    declare  @Count  int,@Id varchar(8)
    set @Count =(select count(Id) from server where id like @Departmentid +'%')+1
    if @Count < 10 
    set @Id=char(39)+(@Departmentid +'0'+Cast(@Count as varchar(100)))+char(39)
    else 
    set @Id=char(39)+(@Departmentid+Cast(@Count as varchar(100)))+char(39)
    set @departmentid =char(39)+@departmentid+char(39)
    begin transaction
    exec
    (' Insert into server  values( '+@Id+ ','+@name+ ','+@program+','+@information+ ','+@law+ ','+@acceptance+ ','+@department+','+@departmentid+' )
    ')
    Commit
    GO
    /*=======================程序代码=============================*/
    Private btn_ok_Click()
    Dim Para As ADODB.Parameter
     Dim paraname As Variant
     Dim paravalue As Variant
     Set Conn = New Connector
     Set comd = New ADODB.Command
     Set Para = New ADODB.Parameter
     paraname = Array("@department", "@name", "@program", "@information", "@law", "@acceptance", "@departmentid")
     paravalue = Array("'" + Combo1.Text + "'", "'" + Text1.Text + "'", "'" + RichTextBox3.Text + "'", "'" + RichTextBox1.Text + "'", "'" + RichTextBox2.Text + "'", "'" + Text3.Text + "'", Text2.Text)
     Conn.OpenConnection
     With comd
     .ActiveConnection = Conn.Connector
     .CommandType = adCmdStoredProc
     .CommandText = "Proc_create_server"
     End With
    While comd.Parameters.Count <> 0
       comd.Parameters.Delete (comd.Parameters.Count - 1)
    Wend
     For i = 0 To 6
      With Para
      .Name = paraname(i)
      .Type = adVarChar
      .Size = 100
      .Value = paravalue(i)
      End With
      comd.Parameters.Append Para
      Set Para = New ADODB.Parameter
      Next
      comd.Execute affected
      If affected = 1 Then
      MsgBox "添加成功", vbInformation, "提示"
      Else
      MsgBox "添加失败", vbCritical, "错误"
    end sub
      

  6.   

    代码中有一个循环:
    While comd.Parameters.Count <> 0
       comd.Parameters.Delete (comd.Parameters.Count - 1)
    Wend
    就是删除已存在的哪8个变量,清空Parameters集合。
    通常在调用过程时执行完该循环以上的代码后,Parameters集合就应该是空的。