Parameter 对象
            Parameter 对象代表与基于参数化查询或存储过程的 Command 对象相关联的参数或自变量。
说明许多提供者都支持参数化的命令。需要进行的操作在这些命令中只定义一次,但可以使用变量(或参数)改变命令的某些细节。例如,SQL SELECT 语句可使用参数定义 WHERE 子句的匹配条件,而使用另一个参数来定义 SORT BY 子句的列的名称。Parameter 对象代表与参数化查询关联的参数,或进/出参数以及存储过程的返回值。取决于提供者的功能,Parameter 对象的某些集合、方法或属性有可能无效。使用 Parameter 对象的集合、方法、和属性可进行如下操作: 使用 Name 属性可设置或返回参数名称。
使用 Value 属性可设置或返回参数值。
使用 Attributes 和 Direction、Precision、NumericScale、Size 以及 Type 属性可设置或返回参数特性。
使用 AppendChunk 方法可将长整型二进制或字符数据传递给参数。 
如果知道与想要调用的存储过程或参数化查询相关联的参数属性和名称,则可使用 CreateParameter 方法创建带有相应属性设置的 Parameter 对象,并使用 Append 方法将它们添加到 Parameters 集合。这样就可以设置并返回参数值,而无需调用 Parameters 集合的 Refresh 方法来检索提供者的参数信息,即潜在的、资源集中的操作。

解决方案 »

  1.   

    Parameters 集合
             包含 Command 对象的所有 Parameter 对象。
    说明Command 对象具有由 Parameter 对象组成的 Parameters 集合。使用 Command 对象的 Parameters 集合上的 Refresh 方法,可以获取有关 Command 对象中指定的存储过程或参数化查询的提供者的参数信息。某些提供者不支持存储过程进行调用或参数化查询,使用这样的提供者时调用 Parameters 集合上的 Refresh 方法将返回错误。如果调用 Refresh 方法前没有定义自己的 Parameter 对象而访问 Parameters 集合,ADO 将自动调用方法并填充该集合。如果知道与要调用的存储过程或参数化查询相关联的参数的属性,可以最小化对提供者的调用以提高性能。使用 CreateParameter 方法可以创建具有适当属性设置的 Parameters 对象,使用 Append 方法可以将其添加到 Parameters 集合。这将允许您设置并返回参数值而不必调用参数信息的提供者。如果正在写入不提供参数信息的提供者,则必须使用此方法手工填充 Parameters 集合才能使用参数。如果必要可以使用 Delete 方法将 Parameters 对象从 Parameters 集合中删除。
      

  2.   

    我的存储过程中有一个image参数,应该声明parameter的类型?我用variant,报告参数类型错误。
      

  3.   

    别人的。你看看!可能有用 
    ADO 的参数查询 
     重点在於Command物件中Parameter物的设定,这一点比较烦,因为RDO中可以不用设定
    那麽多,但ADO中每个参数的Input/Output Type甚至是Size都得设,这是因为这样做
    可以增快处理的速度Private cn   As ADODB.Connection
    Private rs As ADODB.Recordset
    Private cmd As ADODB.Command
    Private Sub Form_Load()
    Dim connstr As String
    Dim ans As Integer, errstr As String, sql As String
    Dim param As ADODB.Parameter
    Set cn = New ADODB.Connection
    connstr = "Data Source=ACCOUNT;UID=sa;PWD=;Initial Catalog=NKIUAcc"
    cn.Provider = "SQLOLEDB"
    cn.ConnectionString = connstr
    cn.Open
    sql = "Select * from TESTTAB where caseno = ?" '设定参数查询
    Set cmd = New ADODB.Command
    Set param = New ADODB.Parameter
    With param
         .Direction = adParamInput
         .Type = adBSTR   '设定是字串
         .Size = 8        '长度8
         .Value = "000001  "
    End With
    cmd.Parameters.Append param  '设增Param物件'param物件的新增也可以用以下CreateParameter来做
    'Call cmd.Parameters.Append cmd.CreateParameter("caseno", adBSTR, adParamInput, 8)
    cmd.CommandText = sql
    cmd.CommandType = adCmdText
    Set cmd.ActiveConnection = cn
    Set rs = cmd.Execute
    Debug.Print rs!caseno
    cmd.Parameters(0).Value = "000002"  '重新设定Parameter
    rs.Requery '重新Requery
    .
    . 不过,用Command物件的Execute方法所开的Recordset会是ReadOnly的Recordset,因为没
    有地方设定Recordset的LockType/CursorType等,事实上可以用以下的方式来做,那麽
    该Recorset才能Update
    Private cn   As ADODB.Connection
    Private rs As ADODB.Recordset
    Private cmd As ADODB.CommandDim connstr As String
    Dim ans As Integer, errstr As String, sql As String
    Dim param As ADODB.Parameter
    Set cn = New ADODB.Connection
    connstr = "Data Source=ACCOUNT;UID=sa;PWD=;Initial Catalog=NKIUAcc"
    cn.Provider = "SQLOLEDB"
    cn.ConnectionString = connstr
    cn.Open
    sql = "Select * from TESTTAB where caseno = ?" '设定参数查询
    Set cmd = New ADODB.Command
    Set param = New ADODB.Parameter
    With param
         .Direction = adParamInput
         .Type = adChar   '设定是字串
         .Size = 8        '长度8
         .Value = "000001  "
    End With
    cmd.Parameters.Append param  '设增Param物件cmd.CommandText = sql
    cmd.CommandType = adCmdText
    Set cmd.ActiveConnection = cn
    Set rs = New ADODB.Recordset
    rs.Open cmd, , adOpenKeyset, adLockOptimistic '用这个方式取代cmd.ExecuteDebug.Print rs!caseno
    cmd.Parameters(0).Value = "000002"  '重新设定Parameter
    rs.Requery '重新Requeryrs!f1 = "g"
    rs.Update
      .
      .
     
      

  4.   

    上面没说明白
    我的存储过程中需要一个image类型的参数,应该该parameter应为什么类型?我用variant,报告参数类型错误。