数据库开发:32位SQL Server应用程序设计 | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

数据库开发:32位SQL Server应用程序设计

点滴 admin 14年前 (2011-08-19) 1348次浏览 已收录 扫描二维码

设计Microsoft Windows NT操作系统上的32位SQL Server 应用程序

Christopher Moffatt

Microsoft Technical Resources Group

摘要

Microsoft? Windows
NT?操作系统是建立充满活力、功能丰富的Microsoft SQL Server应用程序的一个完美的平台。SQL Server
Programmer’s Toolkit for Windows NT(SQL Server 程序员Windows
NT工具包)含有DB-Library?的32位(Win32? API)版本,使得开发Windows NT操作系统上的用于Microsoft
SQL Server的DB-Library客户端程序成为可能。

这篇技术文章用于将DB-Library开发人员引入到
Microsoft Windows NT平台上,讨论的问题包括将已有的Windows?
3.x和OS/2?操作系统平台上的DB-Library应用程序转换到Windows
NT操作系统,并对DB-Library应用程序如何利用Win32应用程序编程接口(API,application programming
interface)的一些方法进行了概要说明。

本篇技术文章假定你已熟悉DB-Library API、C语言编程以及下列内容:

? Microsoft SQL Server Programmer’s Reference for C

? Microsoft Win32 API Programmer’s Reference, 第1、2卷

? Converting OS/2 Applications to Windows

建立基于Win32的DB-Library应用程序

下面的章节描述了有关使用Microsoft? Win32?应用程序编程接口(API,Application Programming Interface)建立DB-Library?应用程序的应用。

Win32 DB-Library体系结构

在内部机制上,Win32的DB-Library动态链
接库(DLL,dynamic-link
library)与OS/2?上的实现方式类似。与在OS/2的一样,在Win32中一个独立的操作系统线程(thread)处理每次DB-
Library所发出的与SQL Server的联接。通过调用一个进程(process)所装入的每个DB-Library
DLL实例(instance)在共享代码的同时得到了一个私有数据区。

Win32
DB-Library体系结构与在Microsoft Windows? 3. x中的实现方式不同。在Windows 3.x中,DB-Library

DLL只有一个被所有调用的进程共享的数据段。W3DBLIB.DLL通过对单一数据段的联接的一个链接式列表维护DB-Library联接。这种体系结
构是需要的,因为在Windows
3.x动态链接库只有一个被所有调用进程共享的数据段。这样就必须通过调用dbinit和dbwinexit函数初始化和清除DB-Library
DLL数据结构。

Win32的DB-Library函数包含于NTWDBLIB.DLL中,而命名管道(named pipe)驱动程序包含在DBNMPNTW.DLL中。应设置PATH环境变量包含这些动态链接库所在的目录。

另一个文件,NTWDBLIB.LIB,包含了你的应用程序使用Win32 API的引入(import)定义。应设置LIB环境变量包含NTWDBLIB.LIB所在的目录。

包含文件

SQL Server Programmer’s Toolkit for Windows NT?提供了下列包含文件:

包含文件

内容

SQLFRONT.H

错误代码和严重级(severity levels),混合定义(miscellaneous definitions),和类型定义。

SQLDB.H

所有DB-Library函数的函数原型

 

你可以在INCLUDE环境变量中添加路径,包含这些包含文件所在的目录。或者你也可以使用/I编译行开关指向包含文件所在的目录。

因为你的使用Win32
API的应用程序必须包含SQLDB.H文件,所以你不需要定义所使用的DB-Library函数。这些函数和它们的正确定义已包含在该包含文件中。你必
须在包含DB-Library 包含文件之前定义一个应用程序的操作系统。在所有使用Win32
API设计的DB-Library应用程序的开头包含下列语句;

#define DBNTWIN32

#include

#include

你还能通过使用/D编译行参数定义操作系统(例如,使用/DDBNTWIN32 而不是通过一个#define定义)。

编译和链接

下面的例程显示了一个简单的build文件。该文件使用NMAKE工具编译和链接可调试的使用Win32 API的DB-Library应用程序:

NTLIB=
tsdklibi386

DBLIB=sqldbliblib

guilibs= $(NTLIB)gdi32.lib $(NTLIB)user32.lib $(NTLIB)

userrtl.lib $(NTLIB)kernel32.lib $(NTLIB)
tdll.lib

$(NTLIB)libcmt.lib

all: sqltestw.exe

# Update the object file if necessary.

sqltestw.obj: sqltestw.c sqltestw.h sqltestw.rc makefile

cl386 -c -G3d -Di386=1 -DWIN32 sqltest.c

# Update the resource file if necessary.

sqltestw.res: sqltestw.rc sqltestw.h dilaogs.h dialogs.dlg makefile

rc -r -fo sqltestw.tmp sqltest.rc

cvtres -i386 sqltestw.tmp -O sqltestw.res

del sqltestw.tmp

# Update the exe file if necessary.

sqltestw.exe: sql.obj sqltestw.obj sqltestw.res makefile

link -machine:i386 -subsystem:windows -out:sqltestw.exe

-entry:WinMainCRTStartup

sqltestw.res sqltestw.obj $(guilibs)

($DBLIB)
twdblib.lib

将基于Windows 3.x的DB-Library应用程序转换到Win32环境

所有的DB-Library函数都完全能够在平台间转换。你不需要更改你的任何DB-Library调用。你仅仅需要在编译时定义应用程序的操作系统(例如, 对于Windows NT为#define DBNTWIN32)。

因为Win32 API保持了与Windows
3.x操作系统的兼容性,所以Win32 DB-Library DLL支持所有基于Windows
3.x的DB-Library函数,即使这些函数不需要也是如此。在Windows 3.x出现而在Windows
NT中并不需要的DB-Library函数(例如,DBLOCKLIB和DBUNLOCKLIB)可以被使用,但不执行任何操作。

两个DB-Library函数,dbprhead和
dbprrow,由于发送输出到STDIO而在Windows
3.x并不被支持,但在Win32中它们能够被支持并用于开发CONSOLE子系统应用程序。dbprhead和dbprrow函数提供了一种简便的方式
将查询结果显示到默认输出设备。

如果你希望使已有的基于Windows的DB-Library应用程序能够在Windows NT上运行,你可以采取三种方法:

? 将你的16位Windows 3.x应用程序不加改变的运行于Windows 3.x子系统. 如果你已有Windows 3.x应用程序,你完全不必甚至将来也不需要进行改动,只需要不加改变的运行即可。

?
更改你的应用程序源代码以便其能被编译用于Win32 API或Windows 3.x.
如果你的DB-Library应用程序正在开发或正在改进以满足不断改变的用户需要,以及你希望在Windows 3.x和Windows
NT上运行应用程序,从相同的源代码略微进行改动以建立你的16位(Windows 3.x)版本和32位(Win32)版本的应用程序。

? 将你的应用程序源代码完全转换到Win32.
如果你决定更改你的应用程序只作为32位 (基于Win32)应用程序运行(例如,你需要诸如线程和抢先多任务(preemptive
multitasking)等Win32特性),你可以将你的应用程序转换到Win32 API上,并删除冗余的Windows 3.x调用和依赖。

在保持DB-Library对Windows 3.x兼容基础上进行转换

本章节解释了如何将用于Windows 3.x的DB-Library应用程序转换到Windows NT操作系统,而同时保持与Windows 3.x应用程序的兼容性。

用于Windows 3.x和C运行时态的API调用

一般而言,你可以改变你的代码轻而易举地建立16位或
32位版的应用程序。对于更深入的讨论编写使用Win32 API的且保留了与Windows 3.x兼容性的应用程序,请参阅Microsoft
Win32 API Programmer’s Reference第1卷

下面是使用Win32 API的应用程序开发指导方针:

? 函数定义与原型.确保你的函数定义和函数原型使用了可转换的数据类型。

? Windows 消息参数封装.处理扩宽到32位意味着处理的封装、其它wParam和lParam中的值已经改变。检验你是否需要改变你的应用程序中的wParam和lParam编码。

DB-Library函数和数据类型

所有的DB-Library函数都完全能在操作系统间转换。你只需要在编译的时候定义目标操作系统即可。

许多DB-Library函数的返回值为int型。要注
意int数据类型在Windows 3.x中是16位值而在Win32
API中则是32位值。因此,对你的应用程序进行检查以使用正确的变量类型接收返回int数据类型的DB-Library函数所返回的值。例如,一个定义
为short数据类型的变量在Windows 3.x中可以从DB-Library接收到正确的int值而在Win32 API中则接收到错误的值。

除了检验接收DB-Library的返回值的变量类型是正确的以外,不需要对DB-Library函数做任何改动。

转换的其它考虑

如果你要将Windows 3.x操作系统的一个应用程序转换到Windows NT操作系统上而不需要保持与Windows 3.x的兼容性,你可以改变你的DB-Library代码,删除冗余或不必要的Windows 3.x函数。

冗余的Windows 3.x专用DB-Library函数

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。