⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xp_md5_main.cpp

📁 这个存储过程是计算 MD5 值的
💻 CPP
字号:
/*-------------------------------------------------------------------------*\
|                                                                           |
|                    MS SQL 2000 计算 MD5 存储过程 xp_md5                   |
|                    """"""""""""""""""""""""""""""""""""                   |
|                       根据 Vic Mackey 的存储过程修改                      |
|                           Victor Chen, 2004-05-09                         |
|                   C++ 爱好者网站  http://www.cppfans.com/                 |
'---------------------------------------------------------------------------'
 【安装方法】
  ① 通过执行 SQL 语句注册存储过程:
     打开 Master 数据库,然后执行下面 SQL 语句
     EXEC sp_addextendedproc 'xp_md5', 'd:\pathname\xp_md5.dll'

     如果注册的文件不包含路径,只有文件名,MSSQL会在这个文件夹里面找这个.dll
     C:\Program Files\Microsoft SQL Server\MSSQL\Binn

  ② 创建用来支持 select 语句的 MD5 函数 fn_md5
     打开想要执行这个存储过程的用户数据库,执行下面的 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

.---------------------------------------------------------------------------.
 【使用方法】
  ① 直接执行, 由于 xp_md5 在 master 数据库里面, 所以前面必须有 master.
     EXEC master.dbo.xp_md5 'Hello world!'

  ② 通过 fn_md5 支持 select 语句, 这个函数在用户当前使用的数据库里面.
     SELECT dbo.fn_md5('Hello world!')
.---------------------------------------------------------------------------.
|【程序说明】                                                               |
|  xp_md5.bpr      存储过程 C++ Builder 6.0 工程文件                        |
|  srv.h           Borland C++ Builder 自带的支持的 MSSQL 存储过程的头文件  |
|                  这个文件在 MSSQL 7 和 MSSQL 2000 里面是相同的, M$ 没改过 |
|  OPENDS60.LIB    由于 C++ Builder 自带的文件比较旧,支持 MSSQL 7 的,     |
|                  这个程序带了一个 OPENDS60.LIB 文件,支持 MSSQL 2000      |
|  md5.h           Christophe Devine 原作,没做任何修改                     |
|  md5.cpp         Christophe Devine 原作,没做任何修改                     |
|  xp_md5_main.cpp 存储过程主程序文件,根据 Vic Mackey 的存储过程修改的     |
\*-------------------------------------------------------------------------*/

#include <srv.h>
#include "md5.h"
#pragma link "opends60.lib"

//---------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif

//---------------------------------------------------------------------------
// MSSQL 的存储过程 xp_md5
//---------------------------------------------------------------------------
__declspec(dllexport) SRVRETCODE WINAPI xp_md5(SRV_PROC* pSrvProc)
{
  int nArgs = srv_rpcparams(pSrvProc);
  if(nArgs > 0)
   {
     char szHash[33];

     md5_string((const char*)srv_paramdata(pSrvProc, 1), szHash, srv_paramlen(pSrvProc, 1));
     if (nArgs > 1)
      {
        srv_paramsetoutput(pSrvProc, 2, (unsigned char*)szHash, 32, FALSE);
      }
     else // don't send row if output buffer provided
      {
        srv_describe(pSrvProc, 1, "MD5", SRV_NULLTERM, SRVCHAR, 32, SRVCHAR, 32, (void*)szHash);
        srv_sendrow(pSrvProc);
      }

     srv_senddone(pSrvProc, SRV_DONE_FINAL, 0, 0);
     return 0;
   }

  srv_sendmsg(pSrvProc, SRV_MSG_ERROR, 20000, SRV_INFO, 1, NULL, 0, (DBUSMALLINT) __LINE__, "Usage: EXEC xp_md5 <@string> [@hash OUTPUT]", SRV_NULLTERM);
  srv_senddone(pSrvProc, SRV_DONE_ERROR | SRV_DONE_MORE, 0, 0);
  return 1;
}

//---------------------------------------------------------------------------
// MSSQL 2000 存储过程必须有的函数
//---------------------------------------------------------------------------
__declspec(dllexport) ULONG WINAPI __GetXpVersion()
{
  return ODS_VERSION;
}

//---------------------------------------------------------------------------
// DLL 文件的主程序
//---------------------------------------------------------------------------
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_call_reason, LPVOID lpReserved)
{
  return TRUE;
}

//---------------------------------------------------------------------------
#ifdef __cplusplus
} //extern "C"
#endif
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -