|
自译MSDN文献 《摆脱开发者对 CommandBuilder的依赖》(14) ADO.net 执行: exec sp_executesql N' SET FMTONLY OFF; SET NO_BROWSETABLE ON;_ SET XML:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />FMTONLY ON;SELECT au_ID, au_lname, city FROM authors' 这个操作返回SELECT语句得到的源数据结果集. 他配合DataAdapter来构造另外三个查询命令 (InsertCommand, UpdateCommand, 和 DeleteCommand). 这里, 除非 SelectCommand 比标准SELECT命令复杂. 是的,如果SelectCommand太复杂或包含JOIN操作 CommandBuilder 则无法构建其他命令. 这里列举其他一些限制: · 你的 SelectCommand 必须在查询部分返回至少一个 PrimaryKey(主键) 或unique(唯一标示)列 . 特别指出使用 TimeStamp 列而不是 PrimaryKey 等,均无法工作. · SelectCommand 不能涉及存在JOIN 操作的SQL 查询, 存储过程,或视图. 这意味着你的 SELECT 语句必须对应单张表. · SelectCommand 涉及的列必须同时可以进行读写操作.你不能导入那些由于某种原因不可写入的列或表达式. · CommandBuilder 不尝试 也不提供任何机制来从查询操作中获取输出提示 (例如Identity(标识)变量). · 如果SelectCommand的 CommandText, Connection, CommandTimeout 或 Transaction 属性发生改变, 你必须通知 CommandBuilder 执行 RefreshSchema 方法, 这个操作引起另一个往返(与服务器端). · CommandBuilder生成 UpdateCommand 或 DeleteCommand 经不会改变最后读取之后的任何行 . 这意味着你将不得不书写你自己的代码强制执行 UPDATE 或 DELETE 操作. · CommandBuilder是为单张不相干的表所设计. 你不要期待通过主键/外键关联来更新(一组)表. · 如果你的SelectCommand SQL 列包含特殊字符, 如空格, 句号, 引号 或非字母数字的标示, 你无法使用 CommandBuilder.
|