Database 版 (精华区)

发信人: joy ( 雨送黄昏花易落), 信区: Database
标  题: [从Web页面访问Internet数据库
发信站: 紫 丁 香 (Sat Aug  1 18:07:27 1998), 转信

发信人: lhh.bbs@argo.zsu.edu.cn (倚天), 信区: DATABASE 
标 题: 转载[从Web页面访问Internet数据库 ] 
发信站: Yat-sen Channel BBS (Sun Jul 19 11:22:10 1998) 
转信站: DUT!ustcnews!news.zsu.edu.cn!argo 
出 处: argo.zsu.edu.cn 

当今计算机领域Internet的发展尤为迅猛。目前社会 
上各行各业,都越来越向着Internet发展,因而Internet 
上数据库的应用将会是主流。而用户与Internet进行信息 
交流的主要工具是浏览器,如IE和Netscape。这里,笔者 
以中文Windows NT 4.0 平台,Internet Information 
Server 3.0 (IIS 3.0) Web 服务器为例介绍一种在Web页 
上访问SQL Server 6.5数据库的方法。 


  一、 从Web页访问Internet数据库的原理: 


  之所以要称Internet数据库而不直接叫SQL Server, 
是因为Internet上数据库不一定是SQL Server,还可以是 
ORACLE、Sybase、Informix,乃至Foxpro,在Web页上访 
问它们的原理基本一样,这里以SQL Server 6·5为例描 
述。 

  从Web页访问Internet数据库的详细过程如下: 

  1、客户端用户在浏览器相应页面上向Web服务器 
(IIS)发出请求,这里用户端的页面即可能是HTML文 
件,也可能是直接用到.idc文件; 

  2、Web服务器(IIS)接收到客户端送过来的URL,从中 
得到IDC文件名,并装载Httpodbc.dll文件,.idc文件名 
被映射到Httpodbc.dll; 

  3、Httpodbc.dll读取IDC文件; 

  4、根据.idc文件中的ODBC数据源,Httpodbc.dll让 
IDC连接至ODBC数据源,并执行.idc文件中的SQL语句(由 
ODBC按顺序发送到SQL Server); 

  5、返回SQL语句结果给Httpodbc.dll,由IDC读 
取.idc文件中指定的HTML扩展文件.htx,将得到的SQL结 
果数据与.htx文件合并,形成HTML文档; 

  6、合并后形成的HTML文档被送回到Web服务器,由 
Web服务器再返回给客户端,客户端的浏览器上便呈现出结 
果。 


  二、实例说明: 


  ① ODBC的设置 

  ODBC可支持和管理目前已有的几乎所有数据库的驱动 
程序。通过ODBC,应用程序可对所有数据库进行访问。 

  这里,对Web服务器上的ODBC安装支持SQL Server的 
驱动程序,操作方法为:事先安装好SQL Server 6.5;双 
击控制面板的“ODBC”图标,选“系统DSN”页,添加SQL 
Server驱动程序;在“Data Source Name”栏中填入数据 
源名,填入SQL Server 6.5所在的服务器名;按“Option 
”按钮,在“Database Name”栏中填入要访问的SQL 
Server数据库;按“OK”按钮,可见到在“系统DSN”页 
中已有刚才加的数据源MSSQL。 

  ② 创建一个Web服务虚拟路径 

  缺省情况下,与用户交流的程序是放在Web服务器上 
别名为/Scripts的虚拟目录下供客户端调用。而在实际应 
用中,我们最好为不同的项目创建不同的虚拟目录,这需 
要NT系统管理员权限,请NT系统管理员为你的项目创建一 
个新的虚拟目录,这可在“Microsoft Internet Server 
(公用)\Internet服务管理员”中完成。假设此目录为 
/work,物理路径为D:\InetPub\work。 

  ③ 查询实例 

  现设在SQL Server 6.5中已有一数据库YJS,此库中 
有一表employee,其结构如下: 

  sn    char( 4)   ——序号 

  name   char(16)   ——姓名 

  birthday datatime   ——出生时间 

  duty   char(12)   ——职务 

  salary  int     ——薪水 

  创建query1.idc(查询)文件,内容如下: 

  Datasource: MSSQL 

  Username: sa 

  Template: query1.htx 

  SQLStatement: 

  +SELECT 
sn,name,convert(char(10),birthday,102) as birth, 

  + duty,salary from employee 

  query1.htx内容如下: 

  〈HTML〉 

  〈HEAD〉〈TITLE〉职员情况〈/TITLE〉〈/HEAD〉 

  〈BODY 〉 

  〈font size=2〉 

  〈CENTER〉 

  〈P〉 

  〈TABLE BORDER〉 

  〈%begindetail%〉 

  〈%if CurrentRecord EQ 0 %〉 

  〈caption〉〈b〉职员情况一览表〈/b〉〈/caption 
〉 

  〈p〉 

  〈TR〉 

  〈TH〉〈B〉序号〈/B〉〈/TH〉〈TH〉〈B〉姓名 
〈/B〉〈/TH〉 

  〈TH〉〈B〉出生时间〈/B〉〈/TH〉〈TH〉〈B〉职 
务〈/B〉〈/TH〉 

  〈TH〉〈B〉薪水〈/B〉〈/TH〉 

  〈/TR〉 

  〈%endif%〉 

  〈TR〉 

  〈TD〉〈%sn%〉〈/TD〉〈TD〉〈%name%〉〈/TD 
〉 

  〈TD〉〈%birth%〉〈/TD〉〈TD〉〈%duty%〉 
〈/TD〉 

  〈TD align="right"〉〈%salary%〉¥〈/TD〉 

  〈/TR〉 

  〈%enddetail%〉 

  〈P〉 

  〈/TABLE〉 

  〈/center〉 

  〈/BODY〉 

  〈/HTML〉 

  .htx文件实际上可称为HTML的扩展,与标准HTML文件 
比起来,它包含控制输出HTML文档的一些关键字,如〈% 
begindetail%〉、〈%enddetail%〉、〈%if%〉、 
〈%else%〉、〈%endif%〉等,可产生出动态页面。 
这里,可以在客户端直接调用query1.idc, query1.idc 
中的SQL语句查询后得到的数据合并到query1.htx中形成 
标准的HTML文档,由Web服务器IIS再传给客户端,客户端 
的浏览器便得到查询结果。如图1所示。 

  ④数据输入实例 

  现在我们尝试通过浏览器给表employee输入数据,这 
需要一个HTML文件、一个.htx文件和一个.idc文件,分别 
如下: 


  ·input.htm文件内容: 

  〈html〉 

  〈head〉〈title〉雇员数据录入〈/title〉〈/head 
〉 

  〈BODY 〉 

  〈TABLE〉 

  〈tr〉 

  〈TD〉〈/TD〉 

  〈TD〉 

  〈hr〉 

  〈h2〉请在此处输入您的数据〈/h2〉 

  〈p〉 

  〈font size=3〉 

  〈form action="/work/input.idc" method=get〉 

  〈pre〉 

  〈b〉序号:〈/b〉 〈input type="text" 
name="sn0" 

  value="" size=4 maxlength=4〉 

  〈b〉姓名:〈/b〉 〈input type="text" 
name="name0" 

  value="" size=16 maxlength=16〉 

  〈b〉出生时间::〈/b〉 〈input type="text" 
name="birth0" 

  value="" size=12 maxlength=12〉 

  〈b〉职务:〈/b〉 〈input type="text" 
name="duty0" 

  value="" size=12 maxlength=12〉 

  〈b〉薪水:〈/b〉 〈input type="text" 
name="salary0" 

  value="" size=10 maxlength=10〉 

  〈input type="submit" value="提交"〉 

  〈input type="reset" value="重新填写"〉 

  〈/form〉 

  〈p〉 

  〈/font〉 

  〈/td〉 

  〈/tr〉 

  〈/table〉 

  〈/body〉 

  〈/html〉 

  在浏览器上调用结果如图2(填入数据)。 


  ·input.idc文件内容: 

  Datasource: MSSQL 

  Username: sa 

  Template: input.htx 

  RequiredParameters: 
sn0,name0,birth0,duty0,salary0 

  SQLStatement: 

  + if exists ( 

  + select * from employee 

  + where sn='%sn0%' 

  + ) 

  + select result='duplicate' 

  +else 

  + INSERT INTO employee 

  + VALUES('%sn0%', '%name0%','%birth0% 
','%duty0%',%salary0%); 

  RequiredParameters项是必须的参数名; 


  ·input.htx文件内容: 

  〈html〉 

  〈title〉提交结果〈/title〉 

  〈BODY〉 

  〈TABLE〉 

  〈tr〉 

  〈TD〉〈/TD〉 

  〈TD〉 

  〈hr〉 

  〈h2〉提交结果〈/h2〉 

  〈hr〉 

  〈%begindetail%〉 

  〈%enddetail%〉 

  〈%if CurrentRecord EQ 0 %〉 

  〈h2〉〈I〉〈%idc.sn0%〉 〈%idc.name0%〉 
〈/I〉 记录已经填入。〈/h2〉 

  〈%else%〉 

  〈h2〉相同序号的记录数据已经提交过,请用另外的 
序号! 

  〈/h2〉 

  〈%endif%〉 

  〈hr〉 

  〈font size=2〉 

  〈a href="/input.htm"〉添加新记录〈/a〉 

  〈/font〉 

  〈/td〉 

  〈/tr〉 

  〈/table〉 

  〈/body〉 

  〈/html〉 

  数据提交成功后将看到如图3结果。 

  当序号重复后,将拒绝输入。这时再用前面的查询 
query1.idc浏览employee表,将看到新加的记录。 

-- 
※ 来源:.Yat-sen Channel argo.zsu.edu.cn.[FROM: 202.116.78.173] 

                     [分类讨论区] [全部讨论区] [上一篇] [本讨论区] [回信] [下一篇]

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.229.126]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.680毫秒