在ASP中使用数据库


  ASP有一个最主要的 性能,便是它 可以让你十分轻松地衔接数据库 。通常都是和一个Access或者一个SQL数据库相连 。由于Access是最方便起步的,同时,在你的机器上 兴许已经都装有Access了,所以,在下面的例子中,我们都将 使用Access来做例子 。一旦你学习了ASP和Access数据库衔接的核心技术 步骤,当你开始 使用SQL server的时候,你就会发现,两者所需求的 要害技术是 根本 雷同的 。

  被过滤广告

  当你要衔接数据库的时候,你需求在服务器上将这个数据库 打开 。你 可以通过 使用数据源名(DSN)或者通过在你的脚本语言中直接 使用一个DSN-less衔接的 步骤来衔接和 打开数据库 。

   缔造一个数据源名(DSN)
  你 可以通过在操纵面板中给你的数据库 构建一个系统DSN来使你的数据库 可以在ASP中衔接 使用 。你 可以在你的当地计算机上 构建若干个DSN,每个DSN对应你 使用的不同的数据库 。在 构建完DSN之后,你就 可以在你的当地服务器上测试你的页面了 。假如你的网站是由

  ISP提供服务的,而且这个ISP 支撑ASP,那么极有可能它就会提供一个GUI接口,来给你的数据库 缔造一个DSN 。

  在Windows 95/98/NT中, 打开操纵面板(开始菜单->设置->操纵面板),双击ODBC进入 。
   取舍系统DSN,点击Add 。
   取舍“Microsoft Access Driver”,点击 完毕 。
  填写数据源名 。这是你给你的数据库起的名字,所以和一个alias是同样的操作 。
  在数据库 取舍中点击 取舍按钮,阅读系统中你 缔造的Access数据库所 存放的位置 。
  点击OK
  现在,新的DSN现在就会在系统DSN中显示,而且 可以在你的当地服务器上 使用了 。

  衔接数据库
  让我们 构建一个DSN-less衔接,而且看看是如何衔接数据库的 。当你 缔造一个DSN的时候,你就已经存储了对于这个数据库的一些信息,所以你不需求在每次需求 使用一些信息的时候 反复它们,这些信息如:数据库类型、名称、 存放地点和可选性、消费者和密码 。

  要 缔造一个DSN-less衔接,你就需求提供同样的信息 。下面这个例子就显示了如何给一个叫products的数据库 构建一个DSN-less衔接:

  <%
  StrConnect = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\\\\\\\\db\\\\\\\\products.mdb"
  Set objConn = Server.CreateObject ("ADODB.Connection")
  objConn.OpenStrConnect
  %>

  第二行定义了数据库的驱动和物理路径 。为了要 使用一个DSN-less衔接,你就需求晓得实际的文件 存放地点(绝对路径) 。Server.MapPath给任何一个 使用主机服务的人提供了一个 方便的工作环境来搜索出那些难于查到的实际 拜访路径 。

  假如我们已经 构建了一个系统DSN,并命名为products,则衔接码应该为:

  <%
  Set objConn = Server.CreateObject ("ADODB.Connection")
  objConn.Open "products"
  %>

  现在,数据库就已经 打开了,那么你 可以做些什么呢?第一件 事件固然便是阅读数据库中的一系列记录,并将它们放到你的页面中去 。然而,在这之前,你需求一个recordset 。

  Recordset
  一个recordset是存储在特别数据库表上的全部信息 。所以,当你 打开这个recordset的时候,表中全部的行和列的内容都是可 拜访的 。你需求 打开这个recordeset,正如你需求 打开数据库衔接一样 。它们的命令是 类似的:

  Set objRec = Server.CreateObject ("ADODB.Recordset")
  objRec.Open "downloadable", strConnect, 0,1,2

  这个语句就 缔造了一个名为downloadable表的recordset(objRec),这个表在products数据库的strConnect中定义 。 使用Recordset open, 我们就 可以循环阅读这个表,而且 可以将它的全部内容都显示到屏幕上 。或者,我们 可以测试特定字段的内容,也 可以只将我们关注的内容写到屏幕上去 。

  每一列代表一个字段 。所以,假如数据库表如下所示:

  Product ID
  SKU
  Name
  File
  
  1
  PR12345
  Product A
  install_a.exe
  
  2
  PR12346
  Product B
  Install_b.exe
  

  
  那么,我们就有如下字段的内容:ProductID, SKU, Name, 和File 。你的表很可能会有许多额外的字段内容,可能包括众多东西,如价格或者是产品(商品) 形容 。然而这个示 用意 可以给你提供最 根本的数据库表的概念 。

  填写recordset内容
   使用recordset是十分方便的一件 事件 。假如你想要循环阅读数据库,并将全部的信息都打印到屏幕上显示,你 可以依照下面来操作:

  While NOT objRec.EOF
  \\\\\\\' says to do this as long as we haven\\\\\\\'t reached the end of the file
  Response.WriteobjRec("ProductID") & ", "
  Response.WriteobjRec("SKU") & ", "
  Response.WriteobjRec("Name") & ", "
  Response.WriteobjRec("File") & "
"
  objRec.MoveNext
  Wend ;
   即便你没有如此 使用过loop,你 依旧 可以通过阅读这个代码来将信息写到comma-delimited字符串里,而且当数据库表中 缔造了一个新行的时候,就再一次 缔造一个新的行,来记录表中的那一行 。你 可以 使用同样的 步骤将数据写到HTML表格中去 。通过 使用Response.Write增加你的TABLE标签,需求记住以下几点:

  你的HTML 标签和引号中的内容 。
  假如你的标签或者内容 使用了引号, 留神 使用双引号:
  .
   使用&来衔接变量和HTML/内容信息
   取舍recordset中的字段
   假如我们的products数据库同样包括一个叫OS的字段, 假如这个字段是一个平台分界符 。同样,让我们 假如存储在这个字段的数据不得不是如下的数据:Windows NT, Windows 95, windows 98, Windows, Mac, Unix, 或者 Linux 。

  下面,我们就 可以确认我们需求将哪个字段打印到屏幕上,而要 忽略哪些那些字段 。或者,我们 可以 取舍哪些字段用一种 格局,而另外的字段用其它的 格局,如, 使用不同的 色彩 。

   使用一个 方便的If...,循环就 可以给我们提供更多的数据库操纵 权力 。首先让我们来打印有关Windows NT产品的记录:

  
  

  

  <%
  While NOT objRec.EOF

  If objRec("OS") = "Windows NT" THEN \\\\\\\' specifies the criteria

  Response.Write "

"
  Response.Write ""
  Response.Write ""
  Response.Write ""

  end if
  objRec.MoveNext
  Wend

  %>
  

Windows NT Products
" & objRec("ProductID") & "" & objRec("SKU") & "" & objRec("Name") & "" & objRec("File") & "

  增加一个记录
  一旦你开始 使用recordset和ASP了,你就会十分 盼望 可以通过网络将数据增加到数据库中去 。增加内容是十分主要的,如,当你需求你的网页阅读者留下它们的观点和 意见,或者,当你想要进行治理更新的时候 。

  
  下面的代码 打开了一个recordset,这个recordset是有关一个有着书本和它们作者名字的数据库表格 。你可能曾经看到过这个,然而这次,最终三个 注明书定义的指针类型是不同的:adOpenStatic, adLockOptimistic, adCmdTable:

  <%\\\\\\\' database connection already made; code not shown here
  Set objRec = Server.CreateObject ("ADODB.Recordset")
  objRec.Open "books", bookdb, adOpenStatic, adLockOptimistic, adCmdTable
  %>

  (假如你没有 使用adovbs.inc的复制文件,第三行应该为:objRec.Open "books", bookdb, 3,3,2).

  recordset现在就 预备好 接纳数据了,你 惟独求告诉它增加什么 。在这个状况下, 假如我们从表格中 存入变量:strBookTitle和strBookAuthor 。我们的table, books有两个字段,称作Title 和 Author,所以我们 可以通过 使用下面的语句来增加一个新的记录:

  <%
  objRec.AddNew
  ObjRec("Title") = strBookTitle
  objRec("Author") = strBookAuthor
  objRec.Update
  %>

  strBookTitle和strBookAuthor代表值,通常被消费者 拜访 。假如你只不过想测试add 性能,你 可以给title和author增加一个变量――只不过需求记住 使用引号 。在你第一次 使用它的时候,你可能会马上 打开你的数据库,以确保更新的 产生 。

  Recordset类型
  在显示的objRec.Open例子中,你会发现在末尾有0,1,2的字样 。这些数字代表不同的指针类型 。你是用的类型依赖于你将 使用它来干什么 。例如,假如你不需求 批改或增加任何的记录,你 可以 使用一个Lock类型 。而当你 方案要 批改或者更新数据库的时候,你所 取舍的类型就会不同 。

  0,1,2 实际上代表:

  adOpenForwardOnly, adLockReadOnly, adCmdTable

  固然,假如在你的服务器上已经有了adovbs.inc的备份,那么,你也 可以不 使用数字,直接 使用这些单词 。adovbs.inc 包括了这三个常量和其它常量的一个列表 。