ariant进行传递。
更进一步的Find方法的第一个参数是一个指向一维SafeArray数组的VariantAddNew方法的可选的第一与第二个参数也是一个一维的SafeArray数组GetRows方法的返回值则是一个包含二维SafeArray数组的Variant。
缺省参数 VB允许省略方法的某些参数。
例如Recordset对象的Open方法有五个参数但是你可以跳过中间的参数并省略之后的参数。
被省略的参数会被自动创建的BSTR或Variant缺省值替代。
在C/C中所有的操作数必须被明确。
如果你想定义一个字符串型的缺省参数那么就定义一个包含空字符串的_bstr_t。
如果想定义一个Variant型的缺省参数那么就定义一个值为DISP_E_PARAMNOTFOUND、类型为VT_ERROR的_variant_t。
你还可以使用import编译指示符提供的与之等价的常量vtMissing。
vtMissing的使用有三种意外情形Connection与Command对象的Execute方法Recordset对象的NextRecordset方法。
_RecordsetPtr Execute _bstr_t CommandText VARIANT RecordsAffected long Options // Connection _RecordsetPtr Execute VARIANT RecordsAffected VARIANT Parameters long Options // Command _RecordsetPtr NextRecordset VARIANT RecordsAffected // Recordset 参数RecordsAffected与Parameters都是指向Variant的指针。
Parameters是一个传入参数指向一个包含一个或一组参数信息的Variant的地址将决定命令执行的内容。
RecordsAffected是一个传出参数指向一个包含该方法返回时影响行的数目的Variant的地址。
在Command对象的Execute方法中如果只是没有参数的话需要将Parameters设置为vtMissing 推荐使用或者一个空指针NULL。
如果传递的是一个空指针那么等价的vtMissing会被传递并完成操作。
在所有的方法中通过设置RecordsAffected为空指针可以指示不需返回被影响的记录的数目。
此时这个空指针实际成为了指示该方法抛弃被影响记录数目的指示器。
因此如下的编码是有效的 pConnection-ExecutecommandText NULL adCmdText pCommand-ExecuteNULL NULL adCmdText pRecordset-NextRecordsetNULL 错误的处理 在COM中大多数的操作总是返回一个HRESULT值说明该函数是否被成功完成。
编译指示符import为所有源方法和属性提供了封装好的代码并检查返回的HRESULT值。
如果HRESULT指示失败这些封装代码将会通过调用以HRESULT为参数的_com_issue_errorex抛出一个COM错误。
COM错误对象将在try-catch块中被捕获出于效率的考虑实际捕获的是一个_com_error对象的引用指针。
记住由ADO操作失败产生的错误才是ADO错误。
由下层提供者返回的错误以Connection对象中Errors集合中的一个Error对象的形式出现。
编译指示符import只能为在ADO.dll中声明的方法和属性提供错误处理例程。
因此你可以基于同样的错误处理机制编写自己的错误检查宏或内置函数。
参见《Visual C扩展》以及本文后续的示例代码。
上一篇:
该内存不能为read或written的解决方案
下一篇:
【材料工艺】纳米晶镍镀层的制备及其界面扩散与结构