程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 設計Microsoft Windows NT操作系統上的32位SQL Serv

設計Microsoft Windows NT操作系統上的32位SQL Serv

編輯:關於SqlServer

設計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 <sqlfront.h>

#include <sqldb.h>

你還能通過使用/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函數

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved