{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
示例 2:访问 Visual FoxPro COM 组件
可以使用 Visual FoxPro 7.0 创建 COM 组件,以封装数据访问功能和相关的逻辑。ASP.NET 用于创建 COM 对象的包装程序并访问其方法。用户可以在 Web 页中输入客户 ID。之后,ASP.NET 页将调用 Visual FoxPro 7.0 COM 对象,传递用户输入的这个客户 ID。COM 对象搜索客户记录并返回客户的信用额度。 下面的屏幕快照显示了 Design(设计)视图中显示的客户信用额度 Web 页 (VFP7COM.aspx) 的 ASPx 文件。其中使用了五个控件,包括四个 Label 和一个 TextBox。 图 4:Design(设计)视图中的客户信用额度 Web 窗体
下面列出了使用 Visual Basic .NET 编写的本示例的实现代码。
' 设置对类库的引用。类似于 Visual FoxPro 7.0 中的
SET CLASSLIB TO。
Imports System
Imports System.IO
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Web
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
' 设置对 Visual FoxPro 7.0 COM 对象的引用。
Imports vfpcomexample
' 创建 ASP.NET 页对象。
Public Class WebForm1
Inherits System.Web.UI.Page
' 设置对 ASP.NET 页上的服务器控件的引用。
Protected WithEvents lblTitle As System.Web.UI.WebControls.Label
Protected WithEvents lblCustID As System.Web.UI.WebControls.Label
Protected WithEvents lblCreditLimit As System.Web.UI.WebControls.Label
Protected WithEvents lblCLDesc As System.Web.UI.WebControls.Label
Protected WithEvents txtCustID As System.Web.UI.WebControls.TextBox
' 这段代码是由 Visual Studio .NET 生成的。
#Region " Web 窗体设计器生成的代码"
' 此调用是 Web 窗体设计器所必需的。
InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Init
' CODEGEN:此方法调用是 Web 窗体设计器所必需的。
' 请勿使用代码编辑器进行修改。
InitializeComponent()
End Sub
#End Region
' 首次加载 ASP.NET 页以及每次刷新该页时都会运行
Page_Load 事件。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' 此处放置用于初始化该页的用户代码。
' 初始化变量以存储对 Visual FoxPro 7.0 COM
组件的引用。
Dim oCustomer As New vfpcomexample.Customer()
' 初始化变量以存储从 COM 对象返回的
信用额度。
Dim dCreditLimit As Decimal
' 如果是第一次呈现该页面。
If (Page.IsPostBack = True) Then
' 运行 COM 方法,传递在 ASP.NET 页上输入的客户 ID,
从而获得信用额度的值。
dCreditLimit = oCustomer.GetCreditLimit(UCase(txtCustID.Text))
' 将服务器控件设置为 COM 对象
返回的值。
' 如果未找到客户,则 COM 对象返回 -1。
If dCreditLimit = -1 Then
lblCreditLimit.Text = "未找到客户"
Else
' 如果找到客户,则将 ASP.NET 页上的信用额度标签
设置为返回的信用额度值,并将其转换为货币形式的
字符串。
lblCreditLimit.Text = dCreditLimit.ToString("C")
End If
End If
End Sub
End Class
用于创建 COM 组件的 Visual FoxPro 7.0 代码为:
DEFINE CLASS Customer AS SESSION OLEPUBLIC
FUNCTION Init()
This.Load()
ENDFUNC
* 打开数据库并使用 customer 表。
FUNCTION Load()
* 打开 TESTDATA 数据库。
LOCAL lcDatabaseLocation as Character
LOCAL lcTableLocation as Character
IF NOT DBUSED('testdata')
lcDatabaseLocation = _SAMPLES + '\DATA\testdata'
OPEN DATABASE (lcDatabaseLocation) SHARED
ENDIF
* 使用 customer 表。
lcTableLocation = _SAMPLES + '\DATA\' + This.GetCursorName()
USE (lcTableLocation) NODATA SHARED
ENDFUNC
* 根据作为参数传入的客户 ID 查找
客户记录。
FUNCTION Fetch()
LPARAMETERS tcCustID as Character
LOCAL lcAlias
lcAlias = This.GetCursorName()
SELECT (lcAlias)
LOCATE FOR Cust_ID = tcCustID
RETURN FOUND()
ENDFUNC
* 关闭 customer 表。
FUNCTION Destroy()
LOCAL lcCursor as Character
lcCursor = This.GetCursorName()
USE IN (lcCursor)
ENDFUNC
* 引用所使用的表。
FUNCTION GetCursorName() as String
RETURN "Customer"
ENDFUNC
* 此方法返回客户的信用额度。
客户 ID 是作为参数传入的。
FUNCTION GetCreditLimit(tcCustID as Character) as Currency
LOCAL lyCredLimit as Currency
* 尝试并查找 customer 表中的客户记录。
IF This.Fetch(tcCustID)
* 找到客户。从 customer 表中的 MaxOrdAmt 字段
返回信用额度。
lyCredLimit = EV






