實(shí)現(xiàn)MicrosoftSQLServer2000擴(kuò)展存儲過程

字號:

這個(gè)存儲過程是計(jì)算 MD5 值的,可以用來進(jìn)行密碼認(rèn)證加密等。
    SQL Server 的擴(kuò)展存儲過程 (Extended Stored Procedure, 簡稱 XP) 是通過在 MSSQL 數(shù)據(jù)庫注冊封裝在 .dll 里面的函數(shù)實(shí)現(xiàn)的,
    而這個(gè) .dll 應(yīng)該按照 M$ 提供的規(guī)則, 并且要連接 MSSQL 的庫文件。由于 C++ Builder 自帶的 MSSQL 庫文件 OPENDS60.LIB 比較舊,
    本文提供新版本的 OPENDS60.LIB 庫文件, 支持 MSSQL 2000 版本的。
    【安裝方法】
    ① 通過執(zhí)行 SQL 語句注冊存儲過程:
    打開 Master 數(shù)據(jù)庫,然后執(zhí)行下面 SQL 語句
    EXEC sp_addextendedproc ’xp_md5’, ’d:\pathname\xp_md5.dll’
    如果注冊的文件不包含路徑,只有文件名,MSSQL會在這個(gè)文件夾里面找這個(gè).dll
    C:\Program Files\Microsoft SQL Server\MSSQL\Binn
    ② 創(chuàng)建用來支持 select 語句的 MD5 函數(shù) fn_md5
    打開想要執(zhí)行這個(gè)存儲過程的用戶數(shù)據(jù)庫,執(zhí)行下面的 SQL:
    CREATE FUNCTION fn_md5 (@string VARCHAR(8000))
    RETURNS CHAR(32) AS
    BEGIN
    DECLARE @hash CHAR(32)
    EXEC master.dbo.xp_md5 @string, @hash OUTPUT
    RETURN @hash
    END
    【使用方法】
    ① 直接執(zhí)行, 由于 xp_md5 在 master 數(shù)據(jù)庫里面, 所以前面必須有 master.
    EXEC master.dbo.xp_md5 ’Hello world!’
    ② 通過 fn_md5 支持 select 語句, 這個(gè)函數(shù)在用戶當(dāng)前使用的數(shù)據(jù)庫里面.
    SELECT dbo.fn_md5(’Hello world!’)
    【程序說明】
    xp_md5.bpr 存儲過程 C++ Builder 6.0 工程文件
    OPENDS60.LIB 由于 C++ Builder 自帶的文件比較舊,支持 MSSQL 7 的,這個(gè)程序帶了一個(gè) OPENDS60.LIB 文件,支持 MSSQL 2000
    md5.h Christophe Devine 原作,沒做任何修改
    md5.cpp Christophe Devine 原作,沒做任何修改
    xp_md5_main.cpp 存儲過程主程序文件,根據(jù) Vic Mackey 的存儲過程修改的
    在創(chuàng)建工程的時(shí)候用 DLL 向?qū)删涂梢粤?,沒有特殊的要求,存儲過程函數(shù)需要按規(guī)定的格式:
    __declspec(dllexport) SRVRETCODE WINAPI xpname(SRV_PROC* pSrvProc)
    其中 xpname 是存儲過程的名,其他的都是規(guī)定的格式不能變
    另外存儲過程 .dll 文件也必須包含這個(gè)函數(shù):
    __declspec(dllexport) ULONG WINAPI __GetXpVersion()
    詳細(xì)的內(nèi)容請下載源程序看,比較簡單。