数学建模社区-数学中国

标题: 使用ASP构造数据库前端 [打印本页]

作者: 韩冰    时间: 2004-10-6 09:48
标题: 使用ASP构造数据库前端
<>我们可以用很多方法为数据库构造前端,例如Access和HTML。其中有一种方法是利用微软以前的ASP技术,包括ADO/ADOX来构造数据库前端。  </P>0 [" b, `: X, z! U2 S' ~
<>我将解释如何利用ASP来一个数据库构造前端,为了具体的表达我的思想,我提供了一个带有代码的例子。这个例子实现了一个不是很完善的应用程序,该应用程序可以为数据库增加和删除表,以及查看表结构定义。你可以扩展例子代码来创建一个功能更强的数据库管理应用程序。现在让我们来深入研究这个例子应用程序。</P>
% V- j, \- k3 s例子应用程序# w# N& n% g5 N* j3 N
<>例子应用程序的源代码包含在单个文件(dbfe.asp)中。如果你想亲自测试该应用程序,你需要用一个Access数据库文件来替代使用通用命名标准(UNC)命名的文件,同时你必须对测试的数据库有所有的权限控制。另外一种方法是你可以改变整个连接字符串,使应用程序连接到你选择的数据库。</P>9 L' I( L# n' ^- _8 G
<>我使用了一个DSN-less  ODBC的连接,这种创建连接的方式是将所有有关数据库连接的信息放在一个字符串中,并在连接字符串中用DRIVER=代替PROVIDER=。如果你的Web服务器能支持ADO和ADOX,当你第一次在Web服务器中装载那个页面时,你将会看到一个包含表名的列表,这个列表包括了当前数据库所有表的名称,甚至还包括了该数据库的系统表的名称。在这个列表的下面有三个按钮,按钮View用来查看选中的表结构定义,按钮Drop用来删除选中的表,按钮Create用来创建一个新表。(图<B>A</B>是例子界面)</P>! Y: F  N4 I* [/ H5 z( N
图A</P>! S( ^1 O" E9 \9 [. l# l
</P>( J6 K0 i; t3 g' F$ _1 g
例子界面</P>! n+ @& Y5 T) I
例子代码
7 C0 `9 i0 R4 w0 o+ R<>如果你查看例子页面的代码,你将会看到一个结构组织得很好的ASP应用程序,例子代码使用了如下的措施:</P>
6 A2 c9 q% ?5 ]! Z1 H对象变量通过使用<I>Server.CreateObject()</I>来进行定义。表单发送后,如果有<I>QueryString</I>值,这些值将被赋值到本地变量。
" K0 h1 ^) q9 a1 J6 n9 U9 }) {依据<I>QueryString</I>中用户要求的动作值来进行代码分支。发送给用户的消息被赋值到<I> sMsg</I>变量,用户要求的动作(查看、删除和增加)的处理结果被赋值到<I> sView</I>变量。
+ k) U7 g, C! ~6 C6 r0 {& ^4 B2 |! u图形用户界面(GUI)的功能定义为:<I>fnShowTables,fnShowTable,</I>and <I>fnShowCreateTable</I>. , l! K- C2 @6 T- N, j
变量<I>sView</I>和 <I>sMsg中有内联的</I>HTML,用来帮助显示用户界面。
* ]" \' S7 Y% q+ {" X( E7 D
$ H% Z4 Q+ H0 g# C: n: ^9 O4 O<>下载例子应用程序
. h/ t8 E: y- U+ h" k7 E点击这里 来下载该文中的例子。 </P>+ V) V  l$ |9 J- ]6 F, j0 _6 I
完善例子应用程序的一些措施[被屏蔽广告]0 P3 w5 {. z9 r1 _1 R& J* o. K
  1. &lt;SCRIPT language=JavaScript1.1 src="http://ad.cn.doubleclick.net/adj/messagingplus.zdnet.com.cn/developer/tech;sz=1x1;ord=382011218?"&gt;; N4 g5 t6 o7 v* o0 o0 t/ G

  2. & k' p5 ~9 {0 l8 w) S
  3. &lt;script&gt;
复制代码

. t! L8 m( d6 ?" s   7 S1 z/ W4 z/ P! i
      2 A7 X1 ]: r. M# u1 _
<>例子应用程序中的代码仅仅提供了一些值得借鉴的方法。通过研究例子中的代码,你会发现一些对象的属性和方法。如果你准备创建一个高质量产品化的数据库应用程序,你应该重新设计用户界面,并且根据用户需要的方式将这些属性和方法所具有的功能提供给他们。文中余下的部分将研究怎样利用在例子中学到的技巧使用ASP来创建高质量产品化的数据库应用程序。</P>+ H8 V: K4 x# e  ~
数据库连接的安全性和错误处理
' R$ S7 C6 A9 c# e% I; J3 G% e* o) Y- G<>数据库连接字符串在例子中是静态的,它在ASP文件中以硬编码的形式出现。这种方法使得任何能访问你的ASP文件的用户可以得到该数据库连接字符串的信息,一旦得到了这些信息,他们就可以访问你的数据库,这里有很大的安全隐患。所以出于对数据库安全性的考虑,你需要使用的一个存储在系统文件或者系统注册中的机器DSN或者将数据库连接字符串编译到 DLL中,这些方法可以确保数据库连接信息的安全。</P># T  @; `/ Q+ b
<>另外,数据库连接对象在页的顶部被打开,在页的底部关闭,这个页面使用一个数据库连接,创建、打开、关闭和破坏数据库连接对象个发生一次,这样减少了系统额外的开销。</P>
2 ?( o$ I  W7 V: t; g9 Y<>在页的顶部,代码中有条语句(On Error Resume Next),指示如果有错误,将自动接着从产生错误行的下一行开始执行,而没有具体的错误处理措施。你能增加错误处理,将有关错误的描述存在页面顶部的<I>sMsg</I>变量中,如果有错误发生,这个变量可以向用户显示错误信息。</P>
; c! B" m% G- E5 h# P, N! ]. x6 f7 O<>最后的安全性考虑是没有检查用户创建的SQL语句。当用户创建新表时,他们可能在创建表的SQL语句中用括号内嵌一个与创建表无关的SQL语句。由于一些恶意的SQL能对数据库造成毁灭性的破坏,因此你应该不能让用户用这种SQL语句来访问数据库。</P>; a+ r0 q3 R' h. m, y6 Q
使用ADOX处理列表中的表集合[被屏蔽广告]
& S1 H4 |/ S+ {. F: |
  1. &lt;SCRIPT language=JavaScript1.1 src="http://ad.cn.doubleclick.net/adj/messagingplus.zdnet.com.cn/developer/tech;sz=1x1;ord=1893404733?"&gt;
    ) p; C2 I  b8 Z2 c- y0 B1 a3 [) B
  2. 3 P; d( n! L+ I
  3. &lt;script&gt;
复制代码
/ P3 }- H( s5 Z- b0 c/ {: Z5 E
   
5 H: C0 l7 ^) Z6 m. O& Y7 A      ) I/ e+ j) T- \5 o5 V1 X- \
<>你可以用对象Catalog来查看数据库中的表、视图、存储过程、用户和组。在这个例子应用程序中,我们仅仅处理表集合,其实你也可以很容易的处理上面提到的别的集合。但是当处理用户和组集合时,你要很十分小心,因为你可能很有可能锁住你自己和别的用户,使得你和他们不能正常的访问数据库。</P>8 i# o1 X8 i. e* S8 @* A
表和视图
- x. B! B( m" ~<>如果你在列表中选择一个表并点击View按钮,你将会看到一个关于该表的精简的结构定义和其它描述,如果使用ADOX表对象,你可以很容易的访问关于表的另外几个对象,包括索引、关键字和用来访问该表所使用的数据库连接信息。</P>8 p; p# m! f4 h
使用 ADOX.Column显示列定义
* Z3 L& o$ n5 ~0 ~& w$ A; S6 _<>你可以使用ADOX.Column对象很容易的检查表中列的各种属性的设置。象列的类型、名称和各种约束。通过使用ADOX.Column,你还可以得到一个列同它所在表中的其它列的关系,以及同它所在数据库中其它表的列的关系。</P>- l' z0 E' V( v/ F6 E6 j
创建一个新表
) A! O, y4 {5 y- _# r& D! J<>如果你选择创建表,系统将会显示一个关于创建新表的HTML表单,你在表单上可以输入要表的名称和创建列时要用到的SQL语句。你也可以修改例子中的代码,使用表单元素数组来存储列信息,然后过滤掉一些非法的列,之后就可以创建新表了。</P>3 _) \+ R( X3 B- s* r: o
使用ADO.Connection.Execute创建新表或删除存在的表
4 P& r- h7 ~  F<>例子应用程序根据用户输入的信息来创建新表。有些环境出于安全性方面的考虑不允许使用ADOX来创建和删除表,或者这些环境中使用ADOX创建和删除表很复杂。考虑到这些因素,例子应用程序中的代码使用了ADO Connection对象的Execute方法来执行操纵数据库的SQL语句。</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5