用SQL Server为Web浏览器提供图像 - 3

建立Web项目和设置数据库连接

在注册了 ImageLoader 动态链接库之后，我们就可以建立Web项目了。我们使用微软Visual InterDev 1.0 建立ASP页面以 及到微软SQL Server数据库的数据连接。

首先，打开微软Visual InterDev。在文件File 菜单里，选择新建（New）菜单项。在出现的对话框里，选中Web项目向 导，在项目名称字段里输入ImageLoad 。单击确定（OK），完成后面两步，结束向导。

可以看到， Visual InterDev 在工作空间（Workspace）窗口里自动地生成了一个文件，叫做Global.asa。在用户第一次 查看Web程序里的页面里，就会自动生成这个文件。要连接SQL Server里的数据库，选择项目 | 加入项目（Project | Add To Project），然后选择数据连接（Data Connection）。这里，选择数据源对话框出现，我们必须定义一个数据源名 称（DSN）。

单击新建（New）按钮，在列出的可用数据驱动程序列表里，选择SQL Server，然后单击下一步（Next）。接着，在输入框 里输入 Grocevb 作为DSN。接下来的几步很容易完成，不再详述。

下面，出现了SQL Server 登录对话框。输入服务器名称，登录ID和口令，并单击选项（Option）按钮。从列出的可用数据 库列表里，选择Grocevb，单击确定（OK）。在结束了全部以上步骤之后，就返回到了选择数据源对话框。在这里，从DSN 列表里单击文件名 Grocevb.dsn，然后完成后面几步结束这段操作。

现在，可以双击Global.asa，查看以上步骤在这个文件里生成的代码。代码定义了连接SQL Server数据库所必需的一些变 量。

为了初始化类 clsImageLoader ，必须在Global.asp的开始放两行代码。我们在列表 C里列出了Global.asa里的代码。注 意clsImageLoader 是一个会话范围内的对象。

    列表 C: Global.asa

    <OBJECT RUNAT=Server SCOPE=Session ID=objImageLoader PROGID="ImageLoader.clsImageLoader">
    </OBJECT>
    <SCRIPT LANGUAGE=VBScript RUNAT=Server>
    Sub Session_OnStart
        Session("Grocevb_ConnectionString") = "DRIVER=SQL Server; SERVER=(local);
                     UID=sa;PWD=;APP=Microsoft (R) Developer Studio;WSID=JIA;
                     DATABASE=Grocevb;UseProcForPrepare=0"
        Session("Grocevb_ConnectionTimeout") = 15
        Session("Grocevb_CommandTimeout") = 30
        Session("Grocevb_RuntimeUserName") = "sa"
        Session("Grocevb_RuntimePassword") = ""
    End Sub

    Sub Session_OnEnd
      set objImageLoader = Nothing
    End Sub

    </SCRIPT>

建立ASP页面

为了连接到数据库，并和ImageLoader这个动态链接库通信，我们在Web项目里建立了一个ASP文件。方法是在文件（File） 菜单里选择新建（New）菜单项，在文件（Files）标签卡中选择ASP页面图标，在输入框里输入文件名称。我们把这个页面 命名为default.asp。在default.asp 里包含的代码如列表 D所示。

    列表 D: default.asp

    <% Set dbConn = Server.CreateObject("ADODB.Connection")
       dbConn.ConnectionTimeout = Session("Grocevb_ConnectionTimeout")
       dbConn.CommandTimeout = Session("Grocevb_CommandTimeout")
       dbConn.Open Session("Grocevb_ConnectionString"), Session("Grocevb_RuntimeUserName"), _
                                                        Session("Grocevb_RuntimePassword")

       Set cmdTemp = Server.CreateObject("ADODB.Command")
       Set rstProduct = Server.CreateObject("ADODB.Recordset")
           cmdTemp.CommandText = "SELECT prod_id, prod_name, prod_desc, prod_unitprice, & _
                                   " prod_unitquant, prod_imagetype " & _
                                   "FROM Products ORDER BY prod_name"
           cmdTemp.CommandType = 1
           Set cmdTemp.ActiveConnection = dbConn
           rstProduct.Open cmdTemp, , 0, 1

           objImageLoader.DbName = "Grocevb"
           objImageLoader.TableName = "Products"
           objImageLoader.NameOfImageColumn = "prod_image"
           objImageLoader.NameOfImageTypeColumn = "prod_imagetype"
           objImageLoader.NameOfImageIdColumn = "prod_id"
           objImageLoader.OpenConnection
    %>

    <HTML>
    <HEAD>
    <TITLE>从SQL Server装载图片的示例</TITLE>
    </HEAD>
    <BODY bgcolor="#FFFFFF" TOPMARGIN=8 LEFTMARGIN=4>
      <%Do While Not rstProduct.EOF %>
      <%ProdId = rstProduct("prod_id") %>
      <% objImageLoader.CreateTempImageFile(ProdId) %>
      <% FileName =  "images/" & objImageLoader.ImageFile(ProdId) %>

      <TABLE border=1 cellpadding=0 cellspacing=0 width=100%>
       <TABLE border=0 cellpadding=5 cellspacing=0 width=100% cols=2>
          <td width=30%>
             <IMG ALIGN=BOTTOM SRC= <% =FileName %>>
             <p> </p>
          <font size=2>Image type: <% = rstProduct("prod_imagetype") %>
          </td>
          <td width=70%>
              <p align=center><font size=4><% =rstProduct("prod_name") %></font></p>
              <p align=center><% =rstProduct("prod_desc") %></p>
          </td>
        </TABLE>
        <p> </p>
      <TABLE border=0 cellpadding=5, cellspacing=0 width=100% cols=2>
          <td width=50%>
             <p align=left>Unit quantity: <% = rstProduct("prod_unitquant") %></P>
          </td>
          <td width=50%>
             <p align=left>Unit price: <% =rstProduct("prod_unitprice") %></p>
          </td>
       </TABLE>
      </TABLE>
      <p> </p>
    <% rstProduct.MoveNext %>
    <% Loop %>
    </BODY>
    </HTML>

注意：类ImageLoader 里定义的CreateTempImageFile 方法和ImageFile 属性（只读）需要图片ID作为参数。在这个例子 里，图片ID就是表Products的主关键字(prod_id) 。所以， prod_id 的值必须传递给动态链接库。

总结

在这篇文章里，我们演示了一个方法，使用ActiveX动态链接库和ASP，可以从微软SQL Server服务器把图片装载到Web浏览 器。它已经表明，这个方法在快速开发、容易使用和自定义Web页面的灵活上都有优势。动态链接库被用来连接数据库，提 取图片数据，把图片数据放入文件。ASP页面则负责与SQL数据库和动态链接库通信。我们已经介绍了设置SQL数据库和Web 项目的操作过程。

虽然这篇文章里的动态链接库和数据库的功能做了简化，但这里介绍的步骤对于其它任何强大复杂的Web项目都是有效 的。