用COM自动服务扩展SQL Server的功能
作者:51CTO 来源:51CTO 添加时间:2006-5-26 10:01:28第一个参数是程序ID(ProgID━━一个应用程序名.类名形式的字符串,例如:
Excel.Application,)或者一个类ID(CLSID━━一个nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn形式的全球唯一的ID),它标明你希望创建实例的COM对象。
在可能的情况下,我建议使用ProgID参数,因为它易于输入和记忆。你会发现,只有很少的希望自动操作的对象没有ProgID,如果偶尔碰上这样的对象,就只有使用CLSID了。第二个变量objecttoken也是一个整型变量,一个对象的标记是指向SQL Server创建的对象的句柄和指针,我们需要在随后的对对象的自动操作中使用这个返回的对象标记来确定这个对象。最后的context变量是可选的,可以强迫创建的对象使用某种自动操作的机制。如果其值为1,则要求对象在一个ActiveX DLL文件中;值为4,则要求对象在ActiveX EXE服务器中;如果是缺省的值5,则可以使用任一自动操作。在这里我们建议使用缺省的选项,而无须为context参数提供一个恰当的值。下面调用op_OACreate 的命令将创建一个微软的Excel程序的实例:
|
在创建一个对象后,需要获取其一些属性。要得到这些属性,可以通过下面的语法调
sp_OAGetProperty:
sp_OAGetProperty objecttoken, propertyname[, propertyvalue OUTPUT] [,第一个参数objecttoken的值就是由sp_OACreate返回的值,参数Propertyname是我们希望获取的属性。
在获取这个值是有几种选择,如果该属性是一个单一的值,可以把它存储在一个变量中,或者把它作为一个单行、单字段的结果集;如果属性值是一个一维或二维的数组,则必须把它作为一个结果集;如果如果该属性的值是一个多于二维的数组,sp_OAGetProperty就不能返回它的值,会出现一个错误。要返回一个结果集,只须简单地不指定propertyvalue参数的值即可(如果需要它有一个值以便使用index参数,就把NULL赋给它好了。
否则的话,应该赋给propertyvalue一个适当的类型的值,并且一定要把该参数标记为OUTPUT。如果你访问的属性是一个集合,就需要使用index参数指定这个集合中一个特定的数字。如果一个对象的属性是另一个对象,就应该把这个对象存入一个整数型变量中,sp_OAGetProperty返回的也是一个对象标记,不过与sp_OACreate返回的并不相同。我们可以使用这个对象标记对存储过程返回的任何对象进行自动化操作。下面的命令调用sp_OAGetProperty把一个名字为DefaultFilePath的属性值存入变量@DFP中:
Exec sp_OAGetProperty @Object, 'DefaultFilePath',
@DFP OUTPUT
可以通过如下格式使用sp_OASetProperty存储过程改变一个对象的属性值:
sp_OASetProperty objecttoken, propertyname,newvalue [, index]