具体描述
内容提要
本书是SYBASE软件(北京)有限公司技术系列丛书之一。
Sybase Open Client是SYBASE公司客户机方面的应用编程接口软件(API),它的功
能是按照统一的规程实现客户对服务器的联接,它的作用是使客户机的应用程序和第三
方的工具软件能够通过SQL命令或数据库RPC(远程过程调用)在整个网络上传递并发送
给SYBASE SQL Server,或经Open Server发送给其他的服务器和数据源。本书系统地
介绍了Client-Library的基本结构、编程步骤,以及怎样联接和发送命令给服务器,怎样
使用存储过程、动态SQL语句和游标来处理数据结果。
作者简介
目录信息
第一章 Client-Library概述
1.1客户/服务器体系结构
1.1.1客户的种类(Types of Clients)
1.1.2服务器的种类(Types of Servers)
1.2Open Client和Open Server产品
1.2.1SYBASE Open Client
l.2.2SYBASE Open Server
1.2.3Open Client和Open Server调用的编程接口
1.2.4Open Client 函数库
1.3SYBASE系统11的Open Client
l.3.1SYBASE系统11Open Client包括的产品
1.3.2Client-Library与DB-Library比较
1.4环境设置
1.4.1接口(interfaces)文件
1.4.2环境变量
1.4.3localesdat文件
1.5查找一个SQL Server并使用isql与之连接
1.6样例程序说明
第二章 编程基础
2.1头文件、库文件、编译文本
2.1.1头文件
2.1.2库文件
2.1.3编译文本
2.2控制结构
2.2.1控制结构CS―CONTEXT,CS-CONNECTION,CS-COMMAND
2.2.2三者的继承关系
2.2.3控制结构属性
2.3数据类型
2.4编写一个最简单的CT-Library的应用程序
2.4.1分配环境结构空间
2.4.2初始化函数库
2.4.3分配联接结构
2.4.4设置用户名及口令
2.4.5建立联接
2.4.6关闭联接
2.4.7释放环境结构空间
2.4.8例程说明
第三章 向SQL Server发送命令
3.1第二章中的样例程序介绍(分三个子过程)
3.2分配CS_COMMAND结构,向SQL Server发送命令
3.2.1分配CS_COMMAND结构
3.2.2设置或读取CSCOMMAND结构属性值
3.3初始化、发送、执行命令
3.3.1命令的概念
3.3.2基本步骤
3.4关闭联接、释放资源
3.4.1关闭联接
3.4.2释放资源
第四章 错误及消息处理
4.1客户消息、服务器消息和CS-Library消息
4.1.1客户消息
4.1.2服务器消息
4.1.3CS-Library消息
4.2错误及消息处理的两种方式
4.3定义安装回叫程序处理消息及错误信息
4.3.1定义客户消息回叫程序
4.3.2安装客户消息回叫程序
4.3.3定义服务器消息回叫程序
4.3.4安装服务器消息回叫程序
4.3.5定义CS-Library消息回叫程序
4.3.6安装CS-Library消息回叫程序
4.4样例程序
4.4.1将三个回叫程序写入名为handler.c的文件
4.4.2修改编译文本
4.4.3修改主程序中initdb()子过程
第五章 普通行的处理
5.1概述.
5.2完成与Server的联接
5.2.1对于各种不同类型的结果,建立switch循环
5.2.2ct-results()的参数
5.3返回代码与结果类型
5.3.1返回代码与结果类型的图示
5.3.2关于某些结果类型
5.3.3关于返回代码
5.4可读取的结果类型
5.4.1结果类型图示
5.4.2对于不同类型的结果采取的方法
5.5不同的结果类型
5.5.1调用ct-resu1ts()处理命令产生的各个结果类型
5.5.2某些命令会产生多种结果类型
5.5.3进一步的例子
5.6程序:不同的结果类型
5.7流程图
5.8得到列的个数
5.9把列捆绑到变量
5.10接收转换数据的缓冲区
5.11转换不同的数据类型(普通的数据类型转换)
5.12CS-DATAFMT结构
5.13设置CS-DATAFMT
5.13.1映射到字符串
5.13.2映射到其他数据类型
5.14程序:把列捆绑到程序变量
5.15流程图
5.16取数据
5.17程序:取出并打印每一行
5.18取消不需要的结果
第六章 普通行的描述
6.1得到结果集的信息
6.1.1得到简单“数字”信息
6.1.2用法
6.1.3ct-res-info()的参数
6.2打印“涉及”的行数
6.3得到结果集的信息
6.3.1调用ctdescribe()得到结果集中列的某些特有信息
6.3.2ct_describe()把关于列的信息存入CSDATAFMT
6.3.3ct_describe()的参数
6.4ct_describe()设置CS_DATAFMT结构
6.4.1ct_describe()设置CSDATAFMT结构
6.4.2CSDATAFMT的描述
6.5设置CS DATAFMT的例子
6.5.1结果集的信息
6.5.2cs_describe()设置的CS_DATAFMT结构
6.5.3cstypes.h中描述数据类型的信息
6.6建立CSDATAFMT结构的数组
6.7建立CS_DATAFMT结构的数组(续)
6.7.1建立一个循环
6.7.2fprintf语句的结果
6.8总结
6.9程序:打印列名和结果
6.10得到计算结果的信息
6.10.1举例
6.10.2概述
6.11得到计算结果的信息(续一)
6.11.1计算行的某些信息
6.11.2用法
6.11.3例子
6.11.4ct_compute_info()的参数
6.12得到计算结果的信息(续二)
6.12.1get_aggregate_name()
6.12.2举例
6.13程序:打印计算结果信息
6.14更好地控制存取数据
6.15ct_get_data()
6.15.1用法
6.15.2参数
6.15.3目的
6.16cs_convert()
6.16.1用法
6.16.2参数
第七章 运行存储过程
7.1存储过程
7.2存储过程的优点
7.3存储过程的范例
7.4处理存储过程特有的结果
7.4.1存储过程返回的特殊结果
7.4.2举例
7.4.3在循环中调用ct_results()
7.5返回代码和返回类型
7.5.1运行存储过程后的返回代码和结果类型
7.5.2在循环中调用ct_results()
7.6程序:处理输出参数和返回状态
7.7SQL Server向SQL Server发送RPC
7.7.1图示
7.7.2高效的通讯
7.7.3RPC命令
7.8Client-Library向SQL Server发送RPC
7.8.1图示
7.8.2RPC的优点
7.8.3Client-Library函数调用
7.9RPC的优点
7.10发送RPC命令的步骤
7.11向SQL Server发送RPC信息(不带参数)
7.12向RPC信息增加参数
7.12.1利用ct_param()发送所需数量的参数
7.12.2ct_param()的参数
7.13对变量作数据类型转换
7.14以“本来的”格式传送参数
7.14.1从字符到整型的转换
7.14.2从字符串转换到日期型
7.15为cs_convert()得到c0ntext指针
7.16总结
7.17程序:RPC的一般处理过程
第八章 动态SQL
8.1动态SQL的概述
8.1.1概述
8.1.2动态SQL与存储过程的比较
8.2T-SQL与动态SQL的比较(以“insert”为例)
8.2.1利用T-SQL重复执行insert
8.2.2利用动态SQL重复执行insert
8.3动态SQL的三个阶段
8.4准备SQL语句
8.5执行SQL语句
8.6释放SQL语句占用的资源
8.7总结
8.8程序:动态插入记录
8.9动态SQL的其他功用
第九章 只读游标
9.1游标的概念
9.1.1什么是游标(cursors)
9.1.2游标的基本操作
9.2客户端游标和服务器端游标
9.2.1客户端(Client-side)游标
9.2.2服务器端(Server-side)游标
9.3比较T-SQL语言游标和CT-Library中的游标
9.4使用游标的优点.
9.5使用只读游标的基本步骤
第十章 可修改游标
10.1使用可修改游标的基本步骤
10.2重定位游标的当前位置
10.3重定位游标的基本步骤
第十一章 读写文本/图像字段
11.1文本/图像数据类型的存储方式
11.1.1什么是文本(text)/图像(image)数据类型
11.1.2文本/图像数据类型的存储方式
11.2读取文本/图像字段的值
11.2.1CS-IODESC结构
11.2.2读取文本/图像字段的值
第十二章 批数据拷贝
12.1什么是BULK-Library/C
12.2使用BULK-Library/C编写批数据拷贝程序的两种数据流向
12.3编写BULK-Library/C应用程序前的准备工作
12.3.1头文件bkpublic.h
12.3.2修改编译脚本
12.3.3将数据库″selectint0/bulkcopy"选项设为true
12.4编写批数据拷入程序的基本步骤
附录A Sybase Open Client产品附带的样例程序
附录B Client-Library应用的程序框架
附录C DB-Library和Client-Library
附录D Client-Library CS-Library和Bulk-Copy Library例程列表
· · · · · · (收起)
读后感
用户评价
这本书的封面设计倒是挺引人注目的,那种深蓝色的背景配上银灰色的字体,显得非常专业和稳重,一看就知道是讲技术硬核内容的。我当时买这本书,主要是冲着“Open Client”这个关键词去的,因为我们团队正在进行一个遗留系统的现代化改造,涉及到大量的 Sybase 数据库连接和客户端应用层的重构,迫切需要一本能够系统梳理如何使用官方客户端接口进行高效、稳定开发的权威参考。坦白说,我期望这本书能像一本武林秘籍一样,把那些晦涩难懂的 API 调用、连接池的管理、事务的细粒度控制,以及在不同操作系统环境下(比如 Windows 和 Linux)的差异化处理,都掰开揉碎了讲清楚。尤其是在处理跨平台数据类型映射和错误代码解析方面,我希望能找到详尽的对照表和最佳实践案例。毕竟,在实际的生产环境中,一个微小的连接泄漏或者数据类型错位都可能导致灾难性的后果,所以,一本真正有价值的开发指南,绝不能只是 API 的堆砌,而应该提供的是经过实战检验的架构思想和陷阱规避策略。我希望它能深入讲解如何利用客户端库提供的异步处理机制来提升用户界面的响应速度,这对于开发面向企业用户的桌面应用来说至关重要。如果这本书能涵盖一些性能调优的技巧,比如如何优化 SQL 批处理的效率,那就更完美了。
我对书中关于错误处理和调试章节的期望值非常高,因为在任何复杂的客户端开发中,排查连接中断、SQL 语法错误或是服务器返回的特定状态码,常常占据了开发时间的一半以上。我希望这本书能提供一个详尽的、可检索的错误码索引,最好是能将 Sybase 数据库返回的错误码与 Open Client 库在不同操作层级捕获到的异常进行一一映射。如果这本书能附带一个完整的、可运行的示例工程,其中专门设置了各种模拟故障(如网络延迟、数据库重启、权限不足等),并展示如何通过客户端日志和调试工具来追踪问题根源,那这本书的实用价值将飙升。然而,我阅读下来感觉它更侧重于“如何成功地执行操作”,而不是“当一切都失败时,我们该如何优雅地恢复和诊断”。缺乏对调试工具链的深入集成说明,例如如何将 Open Client 的诊断输出有效地导入到现代的 APM(应用性能管理)系统中,这使得它在面对分布式系统的复杂性时,显得有些力不从心了。
当我翻开目录时,我的第一印象是内容覆盖面似乎相当广泛,这让我既兴奋又略感不安。兴奋的是,它似乎涵盖了从最基础的环境配置到更高级的安全性集成。不安的是,如此宏大的主题,如果每一部分都只是蜻蜓点水,那对于需要深入解决实际问题的开发者来说,价值就会大打折扣。我特别关注了关于安全连接和加密通信的那几个章节,在这个数据安全日益成为重中之重的时代,如何确保客户端与数据库服务器之间传输的数据不被窃听或篡改,是每一个项目经理都会反复强调的重点。我非常期待书中能详细剖析 Sybase 提供的 SSL/TLS 握手流程的配置细节,以及在不同的防火墙策略下,如何确保连接的顺畅。此外,对于数据库连接池的管理,我也希望能够看到更具前瞻性的内容,例如如何结合现代的中间件技术(比如某种成熟的连接池框架)与 Sybase Open Client 进行适配,而不是停留在仅使用原生 API 进行手动管理的层面。毕竟,现代的 Java 或 .NET 应用架构早已不是单体应用,应用服务器的管理和数据库连接的管理是耦合在一起的,这本书如果能触及到这种集成层面的实践经验,那它就真正称得上是一本“指南”了。
这本书的叙述风格,用我的话来说,是那种典型的、略显陈旧的“官方”口吻,非常严谨,缺乏一丝活泼的“开发者之间的交流感”。它更像是一份技术规范的解读,而不是一本手把手教你如何“战斗”的实战手册。在讲解诸如动态 SQL 语句构建和结果集的遍历操作时,代码示例看起来总是那么的规范,仿佛是在教科书的例题中截取出来的,缺乏真实世界中那些错综复杂的业务逻辑所带来的挑战。例如,当处理包含 LOB(大对象)字段的数据存取时,我希望能看到一些关于内存效率和流式处理的深入讨论,而不是仅仅展示 `SQLGetData` 函数的调用顺序。在实际开发中,LOB 的处理往往是性能瓶颈所在,如果书里只是简单地提到了如何获取,而没有深入探讨如何在高并发场景下优化其读写速度,那么对于我这种追求极致性能的工程师来说,帮助就有限了。我更青睐于那种敢于暴露“黑科技”或者非标准实践的书籍,那些能告诉你“虽然标准文档上是这么写的,但在实际生产中,我们都是这么做的”的经验之谈,这本书似乎在这方面略显保守了。
这本书在版本兼容性和未来展望方面的讨论,可以说是不存在的。对于技术选型而言,我们不仅要看现在如何使用,更要考虑未来三到五年的维护成本和技术栈的演进方向。如果这本书是基于一个非常早期的 Open Client 版本编写的,那么其中介绍的许多特性可能已经被更新的版本所取代,或者已被证明存在已知的安全漏洞。我特别希望能看到一章专门讨论从旧版 Sybase 客户端迁移到新版时的兼容性注意事项,以及如何利用新特性来优化旧代码。此外,考虑到目前数据库技术栈的多元化趋势,如果能有一些篇幅探讨如何使用 Open Client 驱动来连接 Sybase ASE 的不同版本(比如从 ASE 12.5 到 16.0 乃至更新的版本),并明确指出不同版本间的 API 差异,那将是对我们维护异构环境非常有帮助的。总而言之,我希望这本书能更具“生命力”,能够反映出技术生态的动态变化,而不是仅仅成为一个特定时间点上技术的静态快照,这样才能让读者感觉到这是一笔长期的知识投资。