sp_OACreate
在 Microsoft SQL Server 实例上创建 OLE 对象实例。语法
sp_OACreate progid, | clsid,
    objecttoken OUTPUT
    [ , context ]参数
progid是要创建的 OLE 对象的程序标识符 (ProgID)。此字符串描述该 OLE 对象的类,其形式如下:'OLEComponent.Object'OLEComponent 是 OLE 自动化服务器的组件名称,Object 是 OLE 对象名。指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。例如,SQLDMO.SQLServer 是 SQL-DMO SQLServer 对象的 ProgID。SQL-DMO 的组件名称为 SQLDMO,SQLServer 对象是有效的,并且同所有 SQL-DMO 对象一样,SQLServer 对象支持 Idispatch。clsid是要创建的 OLE 对象的类标识符 (CLSID)。此字符串描述该 OLE 对象的类,其形式如下:'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。例如,{00026BA1-0000-0000-C000-000000000046} 是 SQL-DMO SQLServer 对象的 CLSID。objecttoken OUTPUT是返回的对象令牌,并且必须是数据类型为 int 的局部变量。该对象令牌用于标识所创建的 OLE 对象,并将在调用其它 OLE 自动化存储过程时使用。context指定新创建的 OLE 对象要在其中运行的执行上下文。如果指定,那么此值必须为下列值之一:1 = 仅为进程内 (.dll) OLE 服务器
4 = 仅为本地 (.exe) OLE 服务器
5 = 进程内 OLE 服务器和本地 OLE 服务器均可如果未指定,其默认值为 5。此值将在调用 CoCreateInstance 时作为 dwClsContext 参数传递。若允许使用进程内 OLE 服务器(通过使用上下文值 1 或 5 或者不指定上下文值),该服务器将可以访问 SQL Server 拥有的内存和其它资源。进程内 OLE 服务器可能会破坏 SQL Server 的内存或资源并导致不可预知的结果,如 SQL Server 访问违规。当上下文值指定为 4 时,本地 OLE 服务器不能访问任何 SQL Server 资源,因而不能破坏 SQL Server 的内存或资源。说明  此存储过程的参数按位置指定,而不是按名称指定。
返回代码值
0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。

解决方案 »

  1.   

    sp_OAMethod
    调用 OLE 对象的方法。语法
    sp_OAMethod objecttoken,
        methodname
        [, returnvalue OUTPUT]
        [ , [ @parametername = ] parameter [ OUTPUT ]
        [...n]]参数
    objecttoken是先前用 sp_OACreate 创建的 OLE 对象令牌。methodname是要调用的 OLE 对象的方法名。returnvalue OUTPUT是该 OLE 对象的方法的返回值。如果指定,那么它必须是适当数据类型的局部变量。如果方法返回单个值,那么或者为 returnvalue 指定一个局部变量,以便在该局部变量中返回方法的返回值,或者不指定 returnvalue,以单列、单行结果集的形式将方法返回值返回给客户端。如果方法返回值是 OLE 对象,那么 returnvalue 必须是数据类型为 int 的局部变量。对象令牌将保存在该局部变量中,并且可由其它 OLE 自动化存储过程使用。当方法返回值是数组时,如果指定了 returnvalue,那么该值将被设置为 NULL。在下列情况下会出现错误: 指定了 returnvalue,但是方法并不返回值。
    方法返回二维以上的数组。
    方法以输出参数的形式返回数组。 
    [@parametername =] parameter [OUTPUT]是方法参数。如果指定,那么 parameter 必须是适当数据类型的值。若要获取输出参数的返回值,parameter 必须是适当数据类型的局部变量,并且必须指定 OUTPUT。如果指定的是常量参数,或未指定 OUTPUT,那么输出参数的任何返回值均被忽略。如果指定,则 parametername 必须是 Microsoft® Visual Basic® 命名参数的名称。要注意 @parametername 不并是 Transact-SQL 局部变量。将去掉符号 (@),并将 parametername 作为参数名传递给 OLE 对象。指定所有位置参数后才能指定命名参数。n是表示可以指定多个参数的占位符。说明  @parametername 可以是命名参数,因为它是指定方法的一部分,并将直接传递给对象。此存储过程的其它参数是按位置指定的,而不是按名称。
    返回代码值
    0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。
      

  2.   

    多谢;libin_ftsafe(子陌红尘:当libin告别ftsafe) 这些都是联机帮助里的阿?那那个存储过程到底是用来实现什么的呢?或者,您能不能举一个小例子来说明?'SQLVersionControl.VCS_SQL'到底是什么呢?为什么要通过他来create呢?
      

  3.   

    SQLVersionControl.VCS_SQL应该是一个class,包含在Visual Interdev组件的DLL文件中。
      

  4.   

    那是不是说这个存储过程实现的功能是通过SQLVersionControl.VCS_SQL创建一个某个东西的对象,那具体的这个什么东西就不知道了,但是他肯定能支持IDispatch接口所以只要我知道了他到底是一个什么东西,就可以知道具体实现的功能了?
      

  5.   

    to:fcuandy(手中无剑) 关键是这个东西不是随便别人写的吧?应该是一个公用的东西比如调用op_OACreate 的命令创建一个微软的Excel程序的实例:Declare @Object intDeclare @RetVal intExec @RetVal=sp_OACreate 'Excel.Application',@Object OUTPUT其中的'Excel.Application' 就是excel的ProgID而这个似乎也应该是某个对象的ProgID吧?
      

  6.   

    上面的代码整理一下:Declare @Object int
    Declare @RetVal int
    Exec @RetVal=sp_OACreate 'Excel.Application',@Object OUTPUT
      

  7.   

    你的意思我明白,只是现在的要岐是, SQLVersionControl.VCS_SQL这东西是厂商提供的还是写代码的人自定义的一个控件. 我这样说应该说的很清楚了吧.
      

  8.   

    咨询了两位资深vc工程师都说没用过,我汗.
    后来在google搜了一下英文文档大致了解到应该是一个关于版本控制的组件. 只是找不到具体详细的文档.我猜应该是vss sdk之类中的东西.
    现在还在下载 vss sdk下下来看看有没有.
      

  9.   

    to:fcuandy(手中无剑) 万分感谢~~~~~~~~~~~~~~~~~~~~~~