下列行集属性是在被更新的表中打开的行集所必需的:DBPROP_IRowsetLocate、DBPROP_IRowsetChange 和 DBPROP_BOOKMARKS。将DBPROP_UPDATABILITY 行集属性设置为 DBPROPVAL_UP_CHANGE 还是 DBPROPVAL_UP_DELETE 取决于执行的操作是 UPDATE 还是 DELETE。
以下是在提供程序上运行 UPDATE 或 DELETE 操作的高级步骤:
- SQL Server 通过 IOpenRowset 接口打开基本表行集。SQL Server 需要行集上的上述属性。
- SQL Server 确定符合条件的将被更新或删除的行。
- SQL Server 通过 IRowsetLocate 接口使用书签在符合条件的行中进行定位。
- 使用 IRowsetChange::SetData(用于 UPDATE 操作)或 IRowsetChange::DeleteRows(用于 DELETE 操作)在符合条件的行上作出所需的更改。
INSERT 语句
支持远程表上的 INSERT 语句的条件要比 UPDATE 和 DELETE 语句宽松:
- 提供程序必须支持在目的基本表中的行集上的 IRowsetChange::InsertRow 操作。
- 如果提供程序不支持 ITransactionLocal,则仅在链接服务器设置了 Non-transacted updates 选项且语句不在用户事务中时,才允许使用 INSERT 语句。
- 如果提供程序不支持 ITransactionJoin,只有不在用户事务中时才允许 INSERT 语句。
SQL Server 使用 IOpenRowset::OpenRowset 打开基本表的行集并调用 IRowsetChange::InsertRow 将新的行插入基本行集中。
传递查询
除了赋予 ICommand 的命令文本是用户提交的(不由 SQL Server 解释)命令字符串外,本方案和“远程查询”方案类似。SQL Server 在调用 ICommandText::SetCommandText 时使用 DBGUID_DEFAULT 作为文字标识符。DBGUID_DEFAULT 指出提供程序应使用它的默认语法。如果该命令文本返回多个结果集(例如,如果该命令调用一个返回多个结果集的存储过程),SQL Server 将只使用命令返回的第一个结果集。
有关 SQL Server 使用的所有 OLE DB 接口的列表,请参阅附录 A:SQL Server 采用的 OLE DB 接口。
总结
Microsoft SQL Server 2000 为访问异类数据源中的数据提供了最可靠的一套工具。通过了解 SQL Server 提供的 OLE-DB 接口,开发人员能够更好地控制和完善分布式查询。
附录 A:SQL Server 采用的 OLE DB 接口
下表(表 4)列出了 SQL Server 使用的全部 OLE DB 接口。“必要”列说明该接口是 SQL Server 所需的 OLE DB 功能中最基本的部分,还是可选的。如果一个给定的接口未标记为必要,SQL Server 仍然能够访问提供程序,但是某些特殊的 SQL Server 功能或优化功能不能用于该提供程序。
对于可选接口,“方案”列指定了使用该接口的方案(是六个方案中的一个或多个)。例如,基本表行集上的 IRowsetChange 接口是可选接口;该接口用于 UPDATE 和 DELETE 语句方案以及 INSERT 语句方案中。如果该接口不被支持,则对提供程序的 UPDATE、DELETE 和 INSERT 语句也不能被支持。其他一些可选接口的“方案”列中标记为“性能”,表示该接口能够提高性能。例如,如果不支持 IDBSchemaRowset 接口,SQL Server 必须打开行集两次:一次获得元数据,另一次执行查询。通过支持 IDBSchemaRowset,将提高 SQL Server 的性能。
表 4:SQL Server 采用的接口
对象接口必要注释方案Data Source 对象IDBInitialize是初始化并设置数据和安全上下文。 IDBCreateSession是创建 DB 会话对象。 IDBProperties是获得有关提供程序功能的信息,设置初始化属性,必要属性:DBPROP_INIT_TIMEOUT。 IDBInfo否获得引用文字、目录、名称、部分、分隔符、字符等等。远程查询。DB Session 对象IDBSchemaRowset否获得表/列的元数据。需要的行集:
TABLES、COLUMNS、PROVIDER_TYPES;
其他可能用到的行集:INDEXES、TABLE_STATISTICS。性能,索引访问。 IOpenRowset是打开表、索引和柱状图上的行集。 IGetDataSource是用于从 DB 会话对象返回到 DSO。 IDBCreateCommand否用于为支持查询的提供程序创建命令对象(查询)。远程查询,传递查询。 ITransactionLocal否用于事务方式的更新。UPDATE、DELETE 和 INSERT 语句。 ITransactionJoin否用于分布式事务支持。如果在用户事务中,则必需有 UPDATE、DELETE 和 INSERT 语句。Rowset 对象IRowset是扫描行。 IAccessor是绑定到行集中的列。 IColumnsInfo是获得行集中的列信息。 IRowsetInfo是获得行集属性的信息。 IRowsetLocate否UPDATE/DELETE 操作和基于索引的查找所需;用于使用书签来查找行。索引访问,UPDATE 和 DELETE 语句。 IRowsetChange否对行集进行 INSERTS/UPDATES/
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页