登录注册
上海交通大学论坛 > 数据库 > 浏览当前帖子 手机版 关闭左侧栏
利用 ISAPI 实现网络数据库查询
返回本版】  【发表帖子】  【回复帖子 浏览量  5588      回帖数 1
龙丘长    等级  

楼主 发表于  2012/5/5 2:53:41    编 辑   



发信人waterbaby (水娃), 信区database 
标  题利用 ISAPI 实现网络数据库查询 
发信站饮水思源站 (Tue May 19 08:56:54 1998) , 站内信件 

  摘要 本文介绍了编写 Microsoft Internet Server Application Programming Interface(ISAPI)  
实现 Internet 上基于 WWW 的数据库查询的方法。  
   关键词 ISAPI ,Internet。WWW  
   THE IMPLEMENTATION OF DATABASE SEARCHING  
  BASED ON THE INTERNET USING ISAPI  
  He Min Zhou Jiaju  
  ( Laboratory of Computer Chemistry, Chinese Academy of Sciences Beijing 100080  
)  
   ABSTRACT In this paper, the implementation of Internet database searching  
based on the WWW by the application of Microsoft Internet Server Application  
Programming Interface is introduced.  
   KEYWORD ISAPI, Internet, WWW(World Wide Web).  
   1 前言  
  随着计算机技术和网络通讯技术的迅猛发展,利用网络进行在线检索已成为一项越来越受到广泛重视的研究课题。对信息量繁杂的系统,我们可以利用诸如 Microsoft  
SQL、Microsoft Foxpro、Microsoft  
Access、Sysbase、Oracle等任何一种数据库开发软件建立数据库,再通过编写应用程序来实现网络数据库查询。本文就是以此为背景,介绍了用  
Microsoft SQL【1-2】建立数据库、用 Visual C++ 编写 ISAPI(Internet Server Application  
Programming Interface)【3】应用程序实现 Internet 上基于 WWW(World Wide Web)【4】的数据库查询的方法。  
   2 ISAPI 性能简介  
  通常,Web 节点是由静态的超文本标记语言( HTML,Hypertext Markup  
Language)【5】组成,交互作用是通过外部过程,即服务器端的公用网关接口 (CGI,Common Gateway Interface)  
【6】应用程序或脚本来实现的。例如,如果我们需要访问不是以 HTML 形式存贮的数据,就必须用 CGI 应用程序来访问数据,然后把结果送回到客户端。  
  ISAPI 是一种标准的编程接口,Web 开发者可用它编写交互式应用程序。ISAPI 扩展(Extension)应用程序具有 CGI 脚本同样的功能,但它比  
CGI 具有更快、更有效的性能。  
  ISAPI for Windows NT 编写的应用程序,Web 用户可通过填写 HTML 表单(Form)或单击 Web 节点上 HTML  
页面中的链接来激活该应用程序。服务器端获取用户提供的信息后,被激活的ISAPI 应用程序对获取的信息作出处理。根据 ISAPI  
应用程序的功能或把获取的信息存入数据库,或以获取的信息为条件访问数据库中的数据,然后把结果以 HTML 页面的形式送回到客户端。  
  ISAPI 的应用程序被编译为动态链接库(DLL, Dynamic Linked Library),该库在WWW  
服务(Service)启动时装载入内存。它要求较少的系统开销,性能明显优于 CGI 应用程序。因为每个请求并不启动单独的进程。而如用 CGI  
作交互程序,每个请求需要启动单独的进程。这两种应用程序在网络数据库查询中的执行流程如下:  
  SAPI 的另一个特征是允许对请求进行预处理(Pre-processing of requests)和对响应进行后处理(Post-precessing of  
responses )。ISAPI 过滤(Filter)可用于定制实现身份验证、文件存取权限的确认和日志管理等功能的应用程序。  
   3 Internet 上数据库查询系统的实现  
  3.1 数据库的建立  
  结构化查询语言 SQL(Structural Query  
Language)是一种工业标准的具有强大的数据维护和查询功能的语言,它是一种可工作在多用户系统上的数据子语言,它在 Client/Server  
系统上工作得特别好。把数据库放在服务器端,在客户机上的 SQL 数据操作命令通过数据库管理系统(DBMS,Database Manage  
System)发送给服务器。服务器的数据库管理系统解释并执行这些命令,然后利用通讯通道将结果送回到客户机。利用 SQL 的这种 Client/Server  
构架,SQL 服务器的系统管理员可对用户授于不同等级的权限,得到相应权限的用户可对库中的记录进行添加、修改、删除或查询等操作。  
  以下是用 Microsoft SQL Server 建立的“customer”表举例:  
  reate table customer (  
  s_id varchar (30) not null,  
  name varchar (30) not null,  
  name varchar (30) not null,  
  ty varchar (20),  
  ate char (2),  
  p char (6),  
  one varchar (20) )  
   3.2 ISAPI 应用程序的编写  
  可以利用 SQL 语句可嵌入在应用程序中的特点,把 SQL 的有关请求语句嵌入在应用程序中。用 Visual C++ 编写 ISAPI 应用程序的方法是:在  
Microsoft Developer Studio 中,建立一个新的 Project Workspace。在程序中利用 Class Wizard 的“Add  
new class”功能通过 ODBC(Open Database Connectivity) 的 SQL 驱动程序与用 SQL 建立的数据库和表联接,将  
SQL 的有关请求语句嵌入应用程序中,以生成动态连接库的方式编译应用程序。以下是编写 Project Workspace  
名字为“Customer”,功能为实现数据库查询的 ISAPI 应用程序的主要程序:  
   // 建立一个 CCustomer 类的函数QueryCus,实现数据库查询  
  void CCustomer::QueryCus(CHttpServerContext* pCtxt, LPTSTR pszf_name, LPTSTR  
pszl_name)  
  {  
  rtContent(pCtxt); // 打印 和 标记  
  teTitle(pCtxt); // 打印 标记等  
  定义CString 类型的变量  
  ring stringSql;  
  ring strQuery;  
  ring strOutput;  
  ring strOutput1;  
  ring strOutput2;  
  定义字符型的数组  
  r* strTemp=new char[200];  
  r strTemp1[]="SELECT * FROM customer WHERE f_name LIKE '";  
  r* strTemp2;  
  r* strTemp3;  
  r* strTemp4=new char[200];  
  定义CDatabase 类的变量 db  
  tabase db;  
  打开数据库,如果不能打开就退出,并打印“Could not open database.”  
  
  !db.Open(_T("Customer"), //lpszDSN (系统源名)  
  LSE, //bExclusive  
  LSE, //bReadOnly  
  ("ODBC; UID=sa; PWD=;"), //lpszConnect (与数据库的连接方式)  
  LSE)) //bUseCursorLib  
   *pCtxt << "Could not open database.";  
  turn;  
   // 定义CCustomerCus 类的变量 rsCustomer  
  stomerCus rsCustomer(&db);  
  赋值  
  Temp2 = ("%-.30s", pszf_name);  
  Temp3 = ("%-.30s", pszl_name);  
  cpy(strTemp4, strTemp1);  
  cat(strTemp4, strTemp2);  
  cat(strTemp4, " ' ");  
  cat(strTemp4, "AND l_name LIKE ' ");  
  cat(strTemp4, strTemp3);  
  cat(strTemp4, " ' ");  
  cat(strTemp4, "\0");  
  cpy(strTemp, strTemp4);  
  ete []strTemp4;  
  ingSql.Format("%s", strTemp);  
  try to 打开 recordset,如果不能打开就 catch the exception。  
    
   {  
   rsCustomer.Open(CRecordset::snapshot, stringSql);  
   catch (CDBException* pEx)  
  {  
   *pCtxt << _T("Error Selecting from table:");  
   TCHAR szErrorMessage[1024];  
   if (pEx->GetErrorMessage(szErrorMessage, sizeof(szErrorMessage)))  
    
   *pCtxt << szErrorMessage;  
   *pCtxt << _T("\r\n");  
    
  turn;  
   // 判断是否有符合条件的记录  
  如果有符合条件的记录  
  (!rsCustomer.IsBOF())  
  {  
  *pCtxt << _T(" 
The Result of Customer Basic Information Searching 
");  
  Ctxt << _T(" 

");  
  Ctxt << _T("");  
      ile (!rsCustomer.IsEOF())  
        
      / 打印符合条件的记录  
      pCtxt << _T("") << _T("[Customer ID]") << rsCustomer.m_cus_id <<  
            _T(" 
            ");  
              pCtxt << _T(" 
            ") << _T("[First name]") << rsCustomer.m_f_name << _T(" 
            ");  
              pCtxt << _T(" 
            ") << _T("[Last name]") << rsCustomer.m_l_name << _T(" 
            ");  
              pCtxt << _T(" 
            ") << _T("[City]") << rsCustomer.m_city << _T(" 
            ");  
              pCtxt << _T(" 
            ") << _T("[State]") << rsCustomer.m_state << _T(" 
            ");  
              pCtxt << _T(" 
            ") << _T("[Zip]") << rsCustomer.m_zip << _T(" 
            ");  
              pCtxt << _T(" 
            ") << _T("[Phone]") << rsCustomer.m_phone << _T(" 
            ");  
              / 把指针移到下一个  
              sCustomer.MoveNext();  
               }  
              Ctxt << _T(" 
");  
   // 如果没有符合条件的记录,打印“Sorry, there is no record according with your conditions.”  
  e  
   *pCtxt << _T(" 
Sorry, there is no record according with your conditions.  
");  
   // 关闭 rsCustomer  
  ustomer.Close();  
  关闭 db  
  Close();  
  txt << _T(" 

");  
  打印 和 标记  
  Content(pCtxt);  
  }  
   3.3 应用程序的安装  
  ISAPI 应用程序(DLL)将其置于 /Scripts 目录中。/Scripts 是应用程序的虚拟目录,虚拟目录具有执行访问权。 虚拟目录可通过  
WWW 服务管理器来设定。当 WWW 第一次被安装时,缺省的 ISAPI 可执行的虚拟目录是 /Scripts。  
  3.4 查询界面的编写  
  谋颈昙怯镅?HTML 编写查询数据库记录的界面,通过提交填写好的FORM 激活 ISAPI 应用程序,实现网络查询。下面是用 HTML  
编写的按“客户名”查询客户有关信息的界面,此文件取名为 QueryCus.htm。  
    
Customer Information Searching System 
  
    
   
Please input the customer's
 First Name     
 Last Name      

  Netscape 或 Internet Explorer 的 URL中键入 http://webserver/QueryCus.htm,其中 
webserver 是服务器名或服务器的域名,屏幕上就会显示查询界面,见图二。根据查询界面提示在表栏中输入客户的“First name”和“Last  
name”值,提交后查询结果在客户端的显示见图三。  
  
   4 结论  
  ISAPI 作交互程序的 Web 节点,ISAPI 应用程序在 WWW 服务启动时被调入内存,每个客户请求并不起动单独的进程,因而要求较少的系统开销,所以  
ISAPI 是一种性能比 CGI 优越的交互式应用程序。  
  此外,随着Windows NT 使用的普及,利用 ISAPI 实现网络数据库查询的应用范围将会越来越广泛。  

ake6688    等级  

2 楼 发表于  2016/3/2 3:10:19    编 辑   

1:   速度+金钱+智慧=胜利 
1
表情
所有内容均为会员自愿发表,并不代表本站立场.
论坛帮助 会员认证删帖申请 联系我们