回 帖 发 新 帖 刷新版面

主题:VF7.0学习网站~~~微软的杀手锏呀--VF7.0

上这个网看看
    http://www.boeworks.com/article/

回复列表 (共11个回复)

沙发

   
   
  Best View:IE 5 & 1024*768  Email:boeworks@boeworks.com  
   
   

   

   

   

   

   

        
 
 
  
  
   
   

   

       
Web Service系列    
Visual FoxPro 7 全新登场之Web Service Client   --
用 Visual FoxPro 编写 Web Service Hot! 陈纯 --
用 Web Service 传送文件 New! 陈纯 --
Visual FoxPro 与 SQL Server 应用系列    
Select-SQL 周周谈 Hot! 陈纯 --
用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序(远程视图之一) Hot!  陈纯 --
用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序(远程视图之二) Hot!  陈纯 --
用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序(SQL Pass Through 之一)Hot! 陈纯 --
SPT 起跳 Hot! 陈纯 --
Excel-VFP-SQL Server 结合应用实例 陈纯 --
COM、Web Server、XML 系列
   
我们的第一个 COM 组件 Hot!  陈纯 --
Visual FoxPro 7 全新登场之XML 在 COM 组件数据集传递中的意义 Hot!
陈纯 --
第一个 WEB 网页 Hot! 陈纯 --
Visual FoxPro 漫谈系列
   
Visual FoxPro 漫谈 Hot!  陈纯 --
Visual FoxPro 7 漫谈 Hot! 陈纯 --
零敲碎打系列
   
Visual FoxPro 中的数据查询  陈纯 --
DDB()函数与双倍余额递减法
陈纯 --
编写简单的导航条
陈纯 --
Graph 对象全接触
陈纯 --
动态生成网页
陈纯 --
在 Visual FoxPro 中实现表单的输出
陈纯 --
TreeView 控件的使用
陈纯 --
Visual FoxPro 7 全新登场之数据安全  
陈纯 --




   
   

   


       

Microsoft Visual FoxPro 和高级 COM New! Calvin Hsia RMH
谈软体专案失败的六大关键
孙文祥 --
Visual FoxPro 的文件处理函数
Tom Gahagan 李光远
窥看 Visual FoxPro 7
-- 蔡晏仁
Microsoft Visual FoxPro 开发人员 ADO 快速入门(一)
John V. Petersen --
Microsoft Visual FoxPro 开发人员 ADO 快速入门(二)
John V. Petersen --
Microsoft Visual FoxPro 开发人员 ADO 快速入门(三)
John V. Petersen --
Microsoft Visual FoxPro 开发人员 ADO 快速入门(四)
John V. Petersen --
Microsoft Visual FoxPro 开发人员 ADO 快速入门(五)
John V. Petersen --
Windows Script Host
George Tasker fbilo
18个VFP效率倍增器
-- fbilo
VFP7 中的语言增强
Doug Hennig fbilo
VFP为什么
fbilo --
Microsoft Visual FoxPro 6.0 for Windows的常见问题
-- 李光远
结构化的查询语言(SQL)之一
章立民 李光远
整合 SQL Server 和 Visual FoxPro
Robert Green RMH
如何关联文件扩展名到自定义的 Visual FoxPro 应用程序
-- --
离线视图的实现
Doug Hennig James Khan
如何使用VFP 和 ADO Stream Object 获取二进制数据
-- RMH
比较 VFP 和 SQL Server 7.0 的数据类型
Michael Levy RMH
VFP 6.0中的_Assign方法
Allen Pollard fbilo
将图片从通用字段中导出
RMH RMH
.NET Framework——微软新一代的软件开发环境 Hot!
王国荣 --


  2001-2002 上海 BOE 数据网络工作室 保留所有权力


 

板凳

Web Service系列    
Visual FoxPro 7 全新登场之Web Service Client   --
用 Visual FoxPro 编写 Web Service Hot! 陈纯 --
用 Web Service 传送文件 New! 陈纯 --
Visual FoxPro 与 SQL Server 应用系列    
Select-SQL 周周谈 Hot! 陈纯 --
用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序(远程视图之一) Hot!  陈纯 --
用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序(远程视图之二) Hot!  陈纯 --
用 Visual FoxPro 与 SQL Server 构建 Client/Server 应用程序(SQL Pass Through 之一)Hot! 陈纯 --
SPT 起跳 Hot! 陈纯 --
Excel-VFP-SQL Server 结合应用实例 陈纯 --
COM、Web Server、XML 系列
   
我们的第一个 COM 组件 Hot!  陈纯 --
Visual FoxPro 7 全新登场之XML 在 COM 组件数据集传递中的意义 Hot!
陈纯 --
第一个 WEB 网页 Hot! 陈纯 --
Visual FoxPro 漫谈系列
   
Visual FoxPro 漫谈 Hot!  陈纯 --
Visual FoxPro 7 漫谈 Hot! 陈纯 --
零敲碎打系列
   
Visual FoxPro 中的数据查询  陈纯 --
DDB()函数与双倍余额递减法
陈纯 --
编写简单的导航条
陈纯 --
Graph 对象全接触
陈纯 --
动态生成网页
陈纯 --
在 Visual FoxPro 中实现表单的输出
陈纯 --
TreeView 控件的使用
陈纯 --
Visual FoxPro 7 全新登场之数据安全  
陈纯 --



3 楼

利用 Visual FoxPro 7.0 在 Visual Studio .NET 中使用 ASP.NET
Cathi Gero,Prenia Corporation
Andy Kramek,Tightline Computers

2002 年 4 月

摘要:本文介绍在 Visual Studio .NET 中使用 ASP.NET 和 ADO.NET 创建 Web 窗体时涉及的多项关键技术。其中包括四个完整的示例,说明如何在此环境中使用 Visual FoxPro 7.0。

目录
简介
什么是 .NET?
.NET 框架和 Visual Studio .NET
Visual Studio .NET 概述
ASP.NET 概述
ADO.NET 概述
Visual FoxPro 7.0 OLE DB 提供程序
配合使用 Visual FoxPro 和 ASP.NET
   示例 1:使用 OLE DB 访问 Visual FoxPro 数据
   示例 2:访问 Visual FoxPro COM 组件
   示例 3:访问 Visual FoxPro 7.0 XML Web Service
   示例 4:从 ASP.NET Web Service 访问 Visual FoxPro 数据
小结

简介
Microsoft® Visual Studio® .NET 中的一些最明显的变化在于扩展了以 ASP.NET 实现的 Active Server Pages (ASP) 技术。Microsoft .NET 框架引入了以下两个主要高级功能,而 ASP.NET 是它们的技术基础:Web 窗体和 XML Web services。

Web 窗体用于前端 Web 开发。Visual Studio .NET 中新增的 Web 窗体设计器提供了所有 .NET 语言都可以使用的公共用户界面,并提供了对大量面向对象的服务器端控件的访问。

服务驱动软件的概念是 .NET 思想的核心。XML Web services 使得通过 Intranet 或 Internet 提供服务变得非常简单。

虽然 Microsoft Visual FoxPro® 7.0 不是 Visual Studio .NET 的一部分,但仍然可以通过各种方法将其集成到使用 ASP.NET 开发的应用程序中,本文列举了四个示例,对其中一些方法进行了说明。这些示例表明,我们可以轻松地将 Visual FoxPro 7.0 无缝集成到基于 Web 窗体的应用程序中。

什么是 .NET?
Microsoft® .NET 框架是 Microsoft XML Web services 平台,由以下四个元素组成:

客户端
指用于个人计算机以及移动和嵌入设备的各种操作系统。例如,Microsoft Windows® XP、Windows XP Embedded 和 Windows CE .NET 就是实现 .NET 框架的新一代软件客户端。

服务
这些服务允许应用程序相互共享数据,并调用其他应用程序的功能,而不必考虑这些应用程序是如何构建的、它们在何种操作系统或平台上运行以及使用何种设备访问它们等。

服务器
服务器用于驻留和部署 XML Web services 以及 .NET 平台。Microsoft .NET Enterprise Server、Windows 2000 Server 系列和即将问世的 Windows .NET Server 系列提供了内置的安全性,并支持 XML 和可缩放功能。

开发人员工具
这些工具用于在 .NET 平台的核心上创建 XML Web services。Visual Studio .NET 提供的框架可以采用四种核心语言进行应用程序开发:Microsoft Visual Basic®、Microsoft Visual C++®、Microsoft Visual C#™ 和 Microsoft JScript®。虽然 Visual FoxPro 7.0 不是 Visual Studio .NET 的一部分,但仍然可以用来创建 XML Web services,因而也是一种有效的 .NET 框架开发人员工具。

有关详细信息,请参阅 Microsoft .NET: What is .NET?(英文)。

.NET 框架和 Visual Studio .NET
Microsoft .NET 框架是用于构建、部署和运行 XML Web services 以及所有应用程序类型(桌面应用程序和基于 Web 的应用程序)的 .NET 平台编程模型。它提供了高效且基于标准的环境,可将现有开发人员的投入与新一代应用程序和服务相集成,同时为部署和操作 Internet 范围的应用程序提供了灵活的解决能力。



图 1:.NET 框架

图 1 显示了 .NET 框架的结构,并说明了 Visual Studio .NET 如何将组件集成到易于使用的单一开发环境中。

.NET 框架由以下组件组成:

语言
Visual Studio .NET 自身包含四种语言:Visual Basic、Visual C++、Visual C# 和 JScript。然而,.NET 框架的模块化特性使得由第三方创作的其他语言也可以集成到 Visual Studio .NET 中。此类语言有 20 多种,包括 Perl、Component Pascal、SmallScript 和 Smalltalk。

公共语言规范
此规范是实现 .NET 框架的所有语言的基础,定义了公共类型系统的标准和所有语言必须实现的功能。这是第三方语言与框架集成的基础。

Windows 窗体
所有语言都共享公共 Windows 窗体引擎。窗体设计器在所有语言中都是一致的,因此所有语言都可以访问提供相同属性和方法的相同固有控件。即使使用不同的语言开发,其界面也都具有相同的外观。

ASP.NET
这是 Web 窗体和 XML Web services 的基础技术。Web 窗体用于前端 Web 开发,而 XML Web services 通过 Intranet 或 Internet 提供相应的功能。

数据管理
ADO.NET 代替 ADO 作为 .NET 框架中的数据处理机制,它是使用 XML 进行数据传输的高度可伸缩技术。

基类库
这些类提供了一致且易于使用的方法,用于访问各种信息(例如,系统信息、用户信息等),而以前要访问这些信息,必须使用特殊的组件或 API。

公共语言运行时 (CLR)
CLR 为编译器提供了托管执行环境和编译服务。CLR 编译器将源代码编译成中间语言 (IL),然后再以实时 (JIT) 方式执行 IL。所有源语言都共享 CLR,并编译成相同的 IL。

有关详细信息,请参阅 Defining the Basic Elements of .NET(英文)。

Visual Studio .NET 概述
Visual Studio .NET 提供了一套丰富的开发工具,隐藏了 .NET 框架中许多内在的复杂性,从而减少了学习产品和开发应用程序所需的时间。安装 Visual Studio .NET 时,同时还会安装 CLR 和 .NET 框架类。Visual Studio .NET 定义了可在 .NET 框架中构建的四种不同的应用程序:

控制台
这些是命令行应用程序,没有图形用户界面 (GUI),可以在 DOS 窗口中执行,并与 DOS 窗口交互。除了固有的用途外,这些应用程序特别适用于测试代码片段以便确保其功能正确。

Windows 窗体
这些是围绕 GUI 构建的高级客户端应用程序,与使用 Visual FoxPro 7.0 编写的桌面应用程序类似。在 .NET 框架中开发的客户端应用程序的新增功能包括可视继承、无需编码的大小调整、自动控件更新和新的控件。

Web 窗体
这些是围绕带有特殊控件的 GUI 构建的基于浏览器的应用程序。Web 窗体应用程序是使用 ASP.NET 编写的。

XML Web services
这些是定义 XML Web services 的应用程序,它们可以在本地网络或 Internet 上公开,供其他 XML Web services 或应用程序使用。它们是基于 HTTP 和 XML 的,因此它们传输的信息可以通过防火墙传递。

要将 Visual FoxPro 7.0 集成到使用 Visual Studio .NET 开发的应用程序中,可以采用以下三种方法之一:

使用 Visual FoxPro 7.0 开发和部署 COM 组件,该组件可在 .NET 应用程序中实例化,并为 .NET 应用程序提供服务。
使用 Visual FoxPro 7.0 创建和提供可由 .NET 应用程序使用的 Web service。当然,Visual FoxPro 7.0 应用程序也可以使用通过 Visual Studio .NET 开发的 XML Web services。
让新的 Visual FoxPro 7.0 OLE DB 提供程序允许 Visual Studio .NET 应用程序访问 Visual FoxPro 7.0 数据库和表中保存的数据。
本文中的示例说明了这三种可能的方法:使用 COM,创建和使用 Web service,以及使用 OLE DB 提供程序提供数据。

有关详细信息,请参阅 Visual Studio(英文)主页。

ASP.NET 概述
ASP.NET 用于创建作为 Web 窗体应用程序一部分的可编程 Web 页。ASP.NET 不仅可以生成动态 Web 页,而且可以针对用户使用的浏览器自定义这些页面。在 ASP.NET 中开发更加容易,因为它包含大量可在应用程序中使用的面向对象的服务器端控件。实际上,ASP.NET 支持四种不同的控件:

HTML 服务器控件
这些是面向服务器的可编程 HTML 元素。HTML 服务器控件提供一个对象模型,能够以非常近似的方式映射到它们所呈现的 HTML 元素。

Web 服务器控件
与 HTML 服务器控件相比,这些控件具有更多的内置功能。Web 服务器控件不仅包含窗体型控件(例如按钮和文本框),而且包括专用控件(例如日历)。Web 服务器控件比 HTML 服务器控件更抽象,因为它们的对象模型不必反映 HTML 语法。

验证控件
这些控件包含逻辑,可以附加到输入控件中,用于测试用户输入的内容。某些验证控件可用来检查必需的字段、特定的值或字符样式,以及指定范围内的值等等。

用户控件
这些是作为 Web 窗体页面创建的自定义控件。Web 窗体用户控件可以嵌入到其他 Web 窗体页面中,并提供了一种简单的方法以创建菜单、工具栏和其他可重复使用的元素。

有关 ASP.NET 控件的详细信息,请参阅 ASP.NET Server Controls(英文)。

ASP.NET 还实现了与 Visual FoxPro 7.0 非常类似的事件驱动编程模型,从而可以将自定义代码附加到事件中并在事件触发时执行这些代码。每次调用 Web 页(本身也是对象)时,将执行一系列过程:初始化、处理和处置信息。ASP.NET 和 Visual FoxPro 7.0 中事件序列的一个主要差异在于,在 ASP.NET 中 Page_Init 事件位于 Page_Load 事件之前。

有关 ASP.NET 事件的详细信息,请参阅 ASP.NET Server Controls Event Model(英文)。

与传统 ASP 相比,ASP.NET 的一个最大优点是它减少了编写应用程序所需的编码量。由于引入了服务器端控件,因而不必再编写过去在不同的浏览器中呈现这些页面所必需的复杂 HTML 和脚本。此外,ASP.NET 可以自动跟踪 Web 页的状态,无需进行传统 ASP 中所必需的所有乏味的编程。测试结果表明,使用 ASP.NET 呈现页面通常比使用传统 ASP 快 2-3 倍。

在过去,传统 ASP 仅限于引擎脚本,尤其是 Microsoft Visual Basic Scripting Edition (VBScript) 和 JScript。而 ASP.NET 支持任何 .NET CLR 语言,您可以使用一种语言编写组件,然后使用另一种语言调用这些组件。ASP.NET 还可以与现有传统 ASP 页同时运行,因为这些文件使用的扩展名不相同。这是应该考虑的重要因素,因为在将应用程序向 ASP.NET 迁移时,不必一次重写所有 Web 页。

将使用 ASP.NET 的 Web 窗体创建为扩展名为 .aspx 的文件时,可以使用两种编程模式。第一种是传统的“内联”模式,在这种模式下,可以将实现代码直接输入到 ASPx 页中。第二种称为“模块化代码”模式,在这种模式下,实现代码并不直接输入到 .aspx 文件中,而是存储在单独的物理文件中,并使用特殊的页面指令从 ASPx 页中引用。模块化代码文件的扩展名表明了所使用的源语言(对于 C# 为 .cs,对于 Visual Basic 为 .vb),这些文件必须预先编译好并置于应用程序根目录下的“BIN”子目录中。

请注意,Visual Studio .NET 只使用模块化代码模式,并包含功能以简化必要文件的创建、管理和编译。

有关创建页面的详细信息,请参阅 Web Forms Code Model(英文)。

ADO.NET 概述
ASP.NET 使用 ADO.NET 实现其数据处理。ADO.NET 的设计专门优化了使用 OLE DB 或 XML 访问数据的过程。其对象模型(参见图 2)与 ADO 类似,由 Connection 对象(提供与数据源的连接)和 Command 对象(执行数据库命令以返回或修改数据,运行存储过程等)组成。



图 2:简化的 ADO.NET 对象模型

ADO.NET 可以使用两种方法检索和存储数据:使用 DataReader(只读),或者使用 DataAdapter 及相关的 DataSet(读/写)。下表比较了这两种方法的特点。

表 1:ADO.NET 数据对象的主要功能

DataReader DataSet
类似于 ADO Recordset ADO.NET 中的新增功能
仅包含单个查询的结果 包含一个或多个 DataTable 对象的集合
仅向前移动 对所有表中的所有行进行完全访问
只读 读/写
连接到数据源;必须显式关闭 与数据源断开连接
只能访问一个数据源 可以存储来自多个源的数据

简而言之,DataReader 从功能性转向了性能,并提供了尽快显示检索数据的机制。无论以何种方式更新数据,都必须使用 DataSet。

有关 ADO.NET 的详细信息,请参阅 Introducing ADO.NET(英文)。

4 楼

Visual FoxPro 7.0 OLE DB 提供程序
在 Visual FoxPro 的早期版本中,开发人员只能通过使用开放式数据库连接 (ODBC) 驱动程序,来允许其他应用程序访问 Visual FoxPro 数据。然而,Visual FoxPro ODBC 驱动程序与 FoxPro V2.6 中的驱动程序没有太大的不同,而且这项技术无法充分支持 Visual FoxPro 数据库的新功能(例如存储过程、触发器和规则)。OLE DB 技术的开发改变了所有这一切,它允许开发人员使用面向对象的方法通过一系列 COM 对象来访问数据。

新的 Visual FoxPro 7.0 OLE DB 提供程序替代了 ODBC 驱动程序,目前该提供程序处于维护阶段,除非发现没有预料到的严重问题,否则不会进行更新或增强。OLE DB 提供程序为开发人员提供了许多重要优点:

数据访问速度比使用 ODBC 更快
支持新的 Visual FoxPro 7.0 数据库事件
支持存储过程(包括需要参数的存储过程)
可以访问数据库容器中的触发器、规则和默认值
事实上,唯一实际的局限性在于,由于 OLE DB 提供程序中不包括对象管理器,因而无法在必须由外部应用程序访问的存储过程中真正创建对象。虽然 Visual FoxPro 7.0 OLE DB 提供程序可以与任何其他运行时组件一样作为解决方案的一部分提供,但它是随(并且仅随)Microsoft Visual FoxPro 7.0 完全许可版本一起发行的。

有关 OLE DB 的详细信息,请参阅 OLE DB Programmer's Reference(英文)。

配合使用 Visual FoxPro 和 ASP.NET
注意:以下示例使用 Visual FoxPro 7.0 附带的“TestData”数据库,该数据库默认安装在 Visual FoxPro 根目录下的 \Samples\Data 子目录中。ASP.NET 示例是使用 Visual Studio .NET 开发和测试的。
示例 1:使用 OLE DB 访问 Visual FoxPro 数据
ASP.NET 可以使用 Visual FoxPro 7.0 OLE DB 提供程序直接访问数据并将其绑定到控件,从而可以在 Web 窗体中显示和修改数据。

该窗体显示基本的客户信息,并包括允许用户修改公司和/或联系人信息的“编辑”按钮。

单击“编辑”按钮时,将呈现随后的页面,从中可以修改客户数据中的公司和联系人字段。选择相应选项可以取消或保存所做的更改。

下面的屏幕快照显示了 Design(设计)视图中显示的客户列表页面 (VFPOLEDB.aspx) 的 ASPx 文件。只需要两个控件:Label 和 Datagrid。



图 3:Design(设计)视图中的客户列表 Web 窗体

下面列出了使用 C# 编写的本示例的实现代码。

// 设置对类库的引用。类似于 Visual FoxPro 7.0 中的
   SET CLASSLIB TO。
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace VFP7OLEDBExample
{
  /// <summary>
  /// WebForm1 的摘要说明。
  /// </summary>

// 创建 ASP.NET 页对象。
  public class WebForm1 : System.Web.UI.Page
  {
    // 设置对 ASP.NET 页上的服务器控件的引用。
    protected System.Web.UI.WebControls.DataGrid dgrCustomers;
    protected System.Web.UI.WebControls.Label lblTitle;

    // 初始化属性以存储不同的数据对象。
    protected System.Data.OleDb.OleDbDataAdapter VFP7DataAdapter;
    protected System.Data.OleDb.OleDbCommand VFP7SelectCommand;
    protected System.Data.OleDb.OleDbCommand VFP7UpdateCommand;
    protected System.Data.OleDb.OleDbConnection VFP7Connection;
    protected System.Data.DataView VFP7DataView;
    
    protected string strUpdateSelect;

注意:OLE DB 提供程序连接字符串的规范包括一个完整的驱动器和路径声明,用于在默认位置存储示例数据。如果您的数据位于其他位置,请对以下行进行相应的修改。
    // 用于连接到 TESTDATA 数据库的 Visual FoxPro 7.0 OLE DB
       提供程序字符串。
    protected string strConnection = @"provider=VFPOLEDB.1 ;data source=
      'C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO 7
         \SAMPLES\DATA\TESTDATA.DBC';password='';user id=''";

// 此方法是由 Visual Studio .NET 生成的。
    public WebForm1()
    {
      Page.Init += new System.EventHandler(Page_Init);
    }

    
// 首次加载 ASP.NET 页以及每次刷新该页时都会运行
   Page_Load 事件。
    private void Page_Load(object sender, System.EventArgs e)
    {
      // 此处放置用于初始化该页的用户代码。

      // 如果是第一次呈现该页。
      if (Page.IsPostBack == false)
      {
        // 运行该方法将 Visual FoxPro 7.0 数据绑定到
           ASP.NET 页上的 DataGrid。
        BindDataGrid();
      }
    }

// 此方法是由 Visual Studio .NET 生成的。
    private void Page_Init(object sender, EventArgs e)
    {
      //
      // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
      //
      InitializeComponent();
    }

    // 此方法将 Visual FoxPro 7.0 数据绑定到
       ASP.NET 页上的 DataGrid。
    public void BindDataGrid()
    {
      // 连接到 VFP 数据库。
      OleDbConnection VFP7Connection = new OleDbConnection();
      VFP7Connection.ConnectionString = strConnection;
      VFP7Connection.Open();

      // 创建带 select 语句的 Command 对象。
      String strSelect = "SELECT * FROM customer";
      OleDbCommand VFP7SelectCommand = new
      OleDbCommand(strSelect,VFP7Connection);

      // 创建 DataAdapter。
      OleDbDataAdapter VFP7DataAdapter = new OleDbDataAdapter();
      VFP7DataAdapter.SelectCommand = VFP7SelectCommand;

      // 创建 DataSet。
      DataSet VFP7DataSet = new DataSet();

      // 使用表信息填充 DataSet。
      VFP7DataAdapter.Fill(VFP7DataSet,"Customer");

      // 绑定到 DataGrid。
      DataView VFP7DataView = new
      DataView(VFP7DataSet.Tables["Customer"]);
      dgrCustomers.DataSource = VFP7DataView;
      dgrCustomers.DataBind();
    }

    // 用户选择 ASP.NET 页上的“编辑”时
       将调用此方法。
    public void DoItemEdit(object objSource,
      DataGridCommandEventArgs objArgs)
    {
      // 将 DataGrid 的 Edit 索引设置为选定的行。
      // 启动编辑模式。
      dgrCustomers.EditItemIndex = objArgs.Item.ItemIndex;
      
      // 运行该方法将 Visual FoxPro 7.0 数据绑定到
         ASP.NET 页上的 DataGrid。
      BindDataGrid();
    }

    // 用户选择 ASP.NET 页上的“取消”时
       将调用此方法。
    public void DoItemCancel(object objSource,
      DataGridCommandEventArgs objArgs)
    {
      // 将 DataGrid 的 Edit 索引重置为 -1,
         退出编辑模式。
      dgrCustomers.EditItemIndex = -1;

      // 运行该方法将 Visual FoxPro 7.0 数据绑定到
         ASP.NET 页上的 DataGrid。
      BindDataGrid();
    }

    // 用户选择 ASP.NET 页上的“更新”时
       将调用此方法。
    public void DoItemUpdate(object objSource,
      DataGridCommandEventArgs objArgs)
    {
      // 创建对象以保存对所编辑行的引用。
      TextBox objCompanyCtrl;
      TextBox objContactCtrl;
      Label objCustIDCtrl;

      // 将这些对象分配给所编辑行中的每个对象。
      objCompanyCtrl = (TextBox)objArgs.Item.FindControl("txtCompany");
      objContactCtrl = (TextBox)objArgs.Item.FindControl("txtContact");
      objCustIDCtrl = (Label)objArgs.Item.FindControl("lblCustID");
      
      // 创建 update select 语句。
      strUpdateSelect = "UPDATE Customer SET Company='" +
        objCompanyCtrl.Text + "', " +
        "Contact='" + objContactCtrl.Text +
        "' " + "WHERE Cust_ID='" +
        objCustIDCtrl.Text + "'";
      
      // 创建新的连接。
      OleDbConnection VFP7Connection = new OleDbConnection();
      VFP7Connection.ConnectionString = strConnection;
      VFP7Connection.Open();

      // 创建带 select 语句的 Command 对象。
      OleDbCommand VFP7UpdateCommand = new
      OleDbCommand(strUpdateSelect,VFP7Connection);
      
      // 执行该命令。
      VFP7UpdateCommand.ExecuteNonQuery();
      
      // 关闭连接。
      VFP7Connection.Close();

      // 将 DataGrid 的 Edit 索引重置为 -1,
         退出编辑模式。
      dgrCustomers.EditItemIndex = -1;
      
      // 运行该方法将 Visual FoxPro 7.0 数据绑定到
         ASP.NET 页上的 DataGrid。
      BindDataGrid();
    }
       // 这段代码是由 Visual Studio .NET 生成的。
  #region Web 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用
        /// 代码编辑器修改此方法的内容。
        /// </summary>
    private void InitializeComponent()
        {    
      this.Load += new System.EventHandler(this.Page_Load);
        }
    #endregion
  }
}

5 楼

示例 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 窗体设计器所必需的。
    <System.Diagnostics.DebuggerStepThrough()> Private Sub
      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 = EVALUATE(This.GetCursorName() + '.MaxOrdAmt')
      ELSE
        * 未找到客户。向调用程序返回 -1。
        lyCredLimit = -1
      ENDIF
      RETURN lyCredLimit
    ENDFUNC

ENDDEFINE

6 楼

示例 3:访问 Visual FoxPro 7.0 XML Web Service
可以使用 ASP.NET 调用通过 Visual FoxPro 7.0 创建的 Web service。

FoxCentral.net (http://foxcentral.net) 是一个免费的 Web 站点,提供 FoxPro 社区感兴趣的信息。此 Web 站点是使用 Visual FoxPro 7.0 创建的,可以用作 Web service,其功能在 XML Web Services 说明语言 (WSDL) 文件中进行了说明,该文件位于 http://www.foxcentral.net/foxcentral.wsdl。

该 Web service 提供了一个 GetItems() 方法,可以调用该方法以返回符合各种标准(作为参数传递给该方法)的张贴项。在 WSDL 文件中,为 Getitems() 方法指定的参数如下:

<message name="foxcentral.GetItems">
  <part name="ldLastOn" type="xsd:dateTime" />
  <part name="ldTimeZone" type="xsd:int" />
  <part name="lnProvider" type="xsd:int" />
  <part name="lcType" type="xsd:string" />
</message>

有关 Visual FoxPro 7.0 中的 XML Web services 的详细信息,请参阅 Web Services Overview(英文)。

下面的屏幕快照显示了 Design(设计)视图中显示的 FoxCentral Extract Web 页 (FoxCentral.aspx) 的 ASPx 文件。其中使用了四个控件,包括两个 Label、一个日历控件和一个 DataGrid。



图 5:Design(设计)视图中的 FoxCentral Extract Web 窗体

下面列出了使用 C# 编写的本示例的实现代码。

// 设置对类库的引用。类似于 Visual FoxPro 7.0 中的
   SET CLASSLIB TO。
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
// 设置对 Visual FoxCentral.net Web Service 对象的引用。
using FoxCentralASPX.net.foxcentral.www;

namespace FoxCentralASPX
{
  /// <summary>
  /// WebForm1 的摘要说明。
  /// </summary>
// 创建 ASP.NET 页对象。
  public class WebForm1 : System.Web.UI.Page
  {
    // 设置对 ASP.NET 页上的服务器控件的引用。
    protected System.Web.UI.WebControls.DataGrid dgrNews;
    protected System.Web.UI.WebControls.Calendar calDate;
    protected System.Web.UI.HtmlControls.HtmlGenericControl cTitle;
    protected System.Web.UI.WebControls.Label outError;
  
// 此方法是由 Visual Studio .NET 生成的。
    public WebForm1()
    {
      Page.Init += new System.EventHandler(Page_Init);
    }

// 首次加载 ASP.NET 页以及每次刷新该页时都会运行
   Page_Load 事件。
    private void Page_Load(object sender, System.EventArgs e)
    {
      // 此处放置用于初始化该页的用户代码。

            // 初始化变量以存储对 FoxCentral.net Web Service
               的引用。
      foxcentral loData = new foxcentral();

      // 初始化要在此方法中使用的其他对象。
      string lcXML = "";
      string lcError = "";
      System.Data.DataSet oDS = new DataSet();
      bool lbError = false;

      // 将 ASP.NET 页可视属性上的服务器控件
         标签和 DataGrid 初始化为 False,
         以隐藏这些对象。
      outError.Text = "";
      outError.Visible = false;
      dgrNews.Visible = false;

      // 如果是第一次呈现该页。
      if (Page.IsPostBack == false)
      {
        // 将选定日期设置为今天的日期。
        calDate.SelectedDate=System.DateTime.Today;
      }

      try
      {
        // 调用 FoxCentral.net 的 GetItems 方法,传递用户
           输入的日期。
        lcXML = loData.GetItems(calDate.SelectedDate,0,0,"ALL");

        // 如果未返回数据,将引发异常。
        if (lcXML == "")
        {
          throw new Exception();
        }
      }
      
      catch(Exception ex)
      {
        // 如果发生异常,则在 ASP.NET 页上设置错误标签文本
           并显示该文本。
        lcError = "没有要检索的消息项";
        outError.Text = lcError;
        outError.Visible = true;
        return;
      }

      try
      {
        // 将 XML 读入 DataSet。
        oDS.ReadXml(new StringReader(lcXML));
      }
      catch(Exception ex)
      {
        // 如果发生异常,则获取对错误的引用并将 error 变量
           设置为 True。
        lcError = ex.ToString();
        lbError = true;
      }

      // 如果发生错误,则在 ASP.NET 页上设置错误标签文本
         并显示该文本。
      if (lbError)
      {
        outError.Text = lcError;
        outError.Visible = true;
        return;
      }
    
      // 将 DataView 对象设置为使用 XML
         创建的名为“News”的表。
      DataView oDataView = new DataView(oDS.Tables["News"]);

      // 将 DataGrid 源设置为 DataView。
      dgrNews.DataSource = oDataView;

      // 绑定 DataGrid。
      dgrNews.DataBind();

      // 显示 DataGrid。
      dgrNews.Visible = true;
    }
  

// 此方法是由 Visual Studio .NET 生成的。
    private void Page_Init(object sender, EventArgs e)
    {
      //
      // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
      //
      InitializeComponent();
    }

// 这段代码是由 Visual Studio .NET 生成的。
    #region Web 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
      private void InitializeComponent()
    {    
      this.calDate.SelectionChanged += new
      System.EventHandler(this.Page_Load);
      this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion
  }
}

示例 4:从 ASP.NET Web Service 访问 Visual FoxPro 数据
您可以创建访问 Visual FoxPro 7.0 数据的 ASP.NET Web service。Web service 定义了 CustomersInCountry() 方法,该方法在传递包含国家/地区名称的字符串时,使用 OLE DB 提供程序连接到 Visual FoxPro 7.0 数据库。然后,执行查询以检索指定国家/地区的客户的详细信息。如果返回数据,则将结果集打包为 XML 并返回给调用对象。

XML Web services 没有用户界面,因此本示例也没有 ASPx 文件。下面列出了使用 C# 编写的实现代码。

// 设置对类库的引用。类似于 Visual FoxPro 7.0 中的
   SET CLASSLIB TO。
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace VFP7WebServiceExample
{
  /// <summary>
  /// Service1 的摘要说明。
  /// </summary>
// 创建 ASP.NET Web Service。
  public class Service1 : System.Web.Services.WebService
  {
// 此方法是由 Visual Studio .NET 生成的。
    public Service1()
    {
      // CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的。
      InitializeComponent();
    }

// 这段代码是由 Visual Studio .NET 生成的。
    #region 组件设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
      private void InitializeComponent()
    {
    }
    #endregion

    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    }

// WebMethod 属性将该方法作为 Web Service 方法提供。
    [WebMethod]
// 此方法将国家/地区作为参数接受并以 XML 格式的字符串
   返回该国家/地区的所有客户记录。
    public string CustomersInCountry(string strCountry)
    {
      string cReturnString;

注意: OLE DB 提供程序连接字符串的规范包括一个完整的驱动器和路径声明,用于在默认位置存储示例数据。如果您的数据位于其他位置,请对以下行进行相应的修改。
      // 连接到 Visual FoxPro 数据库。
      String strConnection = @"provider=VFPOLEDB.1 ;data
      source='C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO
         7\SAMPLES\DATA\TESTDATA.DBC';password='';user id=''";
      OleDbConnection VFP7Connection = new OleDbConnection();
      VFP7Connection.ConnectionString = strConnection;
      VFP7Connection.Open();

      // 创建带 select 语句的 Command 对象。
      String strSelect = "SELECT * FROM customer WHERE
      upper(country)='" + strCountry.ToUpper() + "'";
      OleDbCommand VFP7SelectCommand = new
      OleDbCommand(strSelect,VFP7Connection);

      // 创建 DataAdapter。
      OleDbDataAdapter VFP7DataAdapter = new OleDbDataAdapter();
      VFP7DataAdapter.SelectCommand = VFP7SelectCommand;

      // 创建 DataSet。
      DataSet VFP7DataSet = new DataSet();

      // 使用表信息填充 DataSet。
      int iRecFound;
      iRecFound = VFP7DataAdapter.Fill(VFP7DataSet,"Customer");
      
      // 如果未找到客户记录,则返回空字符串。
      if (iRecFound==0)
      {
        cReturnString = "";
      }
      else
      {
        // 如果找到客户记录,则将 DataSet 结果
           写入 XML 并将其作为字符串返回。
        StringWriter cXML = new StringWriter();
        VFP7DataSet.WriteXml(cXML);
        cReturnString = cXML.ToString();
      }

      return cReturnString;
    }

  }
}

要通过 Visual FoxPro 7.0 使用此 Web service,首先应创建一个 Web service 实例,然后将其分配给一个本地对象引用,如以下代码所示:

LOCAL oCustomers as ASPDotNetWS
LOCAL loWS, lcRetStr

* 初始化 ASP.NET Web service。
loWS = NEWOBJECT("Wsclient",HOME()+"ffc\_webservices.vcx")
loWS.cWSName = "ASPDotNetWS"
oCustomers = loWS.SetupClient
   ("http://localhost/VFP7WebServiceExample/VFP7WebService.asmx?WSDL",
                               "Service1", "Service1Soap")

获得对 Web service 的对象引用后,便可以象调用实际本机 Visual FoxPro 对象一样调用其方法。Web service 以 XML 的形式返回结果,因此,为在 Visual FoxPro 7.0 中查看或使用该结果,我们需要使用 XMLTOCURSOR() 及以下代码将结果转换为本地游标。

* 将从 Web service 返回的 XML 转换为
* Visual FoxPro 7.0 游标并浏览其内容
STORE "" TO lcRetStr
lcRetStr = oCustomers.CustomersInCountry("GERMANY")
IF NOT EMPTY( lcRetStr )
  XMLTOCURSOR( lcRetStr,"CustomersGermany")
  BROWSE
ENDIF

当然,这里我们使用了 Visual FoxPro 7.0 来访问 Web service,但实际上我们可以使用任何能够创建对象并处理 XML 数据的开发工具。XML Web services 的精髓就在于它独立于语言(甚至平台)。

小结
Visual Studio .NET 为开发人员提供了一种使用新的 Web 窗体和 ASP.NET 技术(它们是 Microsoft .NET 框架的关键部分)开发应用程序的入口。Visual Studio .NET 提供了一个功能完备、集成的开发环境,并隐藏了管理各种工具所需的大多数复杂工作,从而使开发人员可以集中精力完成创建和部署应用程序的主要任务。对于 Visual FoxPro 7.0 开发人员来说,使用 Web 窗体和 ASP.NET 创建前端应用程序可以在以下三方面获得显著好处:

允许开发人员开发独立于平台的应用程序。与本机 Visual FoxPro 应用程序不同,ASP.NET 应用程序可以在浏览器中运行,并且不需要安装 Windows 平台。
允许开发人员远程访问 FoxPro 数据。使用在 ASP.NET 中开发的前端应用程序,可以在受控环境中提供 Visual FoxPro 数据,以便 Internet 上的用户可以查看并修改这些数据。
允许开发人员开发独立于设备的应用程序。ASP.NET 应用程序本身支持广泛的设备(包括蜂窝电话和 PDA)访问。
本文中的示例显示了 Visual FoxPro 7.0 如何以不同的方式轻松地与使用 Visual Studio .NET 中的 ASP.NET 创建的 Web 窗体相集成。随着新的 OLE DB 提供程序的问世和 Visual FoxPro 7.0 中引入的 XML 支持的增强,这种级别的集成已经成为可能。

但是,这决不仅仅是单向的交互。Visual FoxPro 7.0 可以轻松地创建以数据为中心的 XML Web services,这些服务很难使用数据和语言之间未紧密集成的工具来构建,而这一功能始终是 Visual FoxPro 的一项优势。

Visual FoxPro 7.0 还可用于创建中间层组件。由于 Visual FoxPro 7.0 全面支持 COM+ 服务,因而可以用来创建很容易从 Web 窗体中调用的数据密集型 COM 组件。这类组件既可以与本机 FoxPro 数据进行交流,也可以通过 OLE DB 与 SQL 数据库进行交流。

如本文所述,虽然 Visual FoxPro 7.0 不是 Visual Studio .NET 的一个组成部分,但这并不意味着它不能积极参与到基于 .NET 的环境中,并对该环境做出贡献。

有关 Visual FoxPro 的详细信息,请参阅 Microsoft Visual FoxPro(英文)主页。有关 ASP.NET 的详细信息,请参阅 Microsoft ASP.NET(英文)主页。

7 楼

示例 3:访问 Visual FoxPro 7.0 XML Web Service
可以使用 ASP.NET 调用通过 Visual FoxPro 7.0 创建的 Web service。

FoxCentral.net (http://foxcentral.net) 是一个免费的 Web 站点,提供 FoxPro 社区感兴趣的信息。此 Web 站点是使用 Visual FoxPro 7.0 创建的,可以用作 Web service,其功能在 XML Web Services 说明语言 (WSDL) 文件中进行了说明,该文件位于 http://www.foxcentral.net/foxcentral.wsdl。

该 Web service 提供了一个 GetItems() 方法,可以调用该方法以返回符合各种标准(作为参数传递给该方法)的张贴项。在 WSDL 文件中,为 Getitems() 方法指定的参数如下:

<message name="foxcentral.GetItems">
  <part name="ldLastOn" type="xsd:dateTime" />
  <part name="ldTimeZone" type="xsd:int" />
  <part name="lnProvider" type="xsd:int" />
  <part name="lcType" type="xsd:string" />
</message>

有关 Visual FoxPro 7.0 中的 XML Web services 的详细信息,请参阅 Web Services Overview(英文)。

下面的屏幕快照显示了 Design(设计)视图中显示的 FoxCentral Extract Web 页 (FoxCentral.aspx) 的 ASPx 文件。其中使用了四个控件,包括两个 Label、一个日历控件和一个 DataGrid。



图 5:Design(设计)视图中的 FoxCentral Extract Web 窗体

下面列出了使用 C# 编写的本示例的实现代码。

// 设置对类库的引用。类似于 Visual FoxPro 7.0 中的
   SET CLASSLIB TO。
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
// 设置对 Visual FoxCentral.net Web Service 对象的引用。
using FoxCentralASPX.net.foxcentral.www;

namespace FoxCentralASPX
{
  /// <summary>
  /// WebForm1 的摘要说明。
  /// </summary>
// 创建 ASP.NET 页对象。
  public class WebForm1 : System.Web.UI.Page
  {
    // 设置对 ASP.NET 页上的服务器控件的引用。
    protected System.Web.UI.WebControls.DataGrid dgrNews;
    protected System.Web.UI.WebControls.Calendar calDate;
    protected System.Web.UI.HtmlControls.HtmlGenericControl cTitle;
    protected System.Web.UI.WebControls.Label outError;
  
// 此方法是由 Visual Studio .NET 生成的。
    public WebForm1()
    {
      Page.Init += new System.EventHandler(Page_Init);
    }

// 首次加载 ASP.NET 页以及每次刷新该页时都会运行
   Page_Load 事件。
    private void Page_Load(object sender, System.EventArgs e)
    {
      // 此处放置用于初始化该页的用户代码。

            // 初始化变量以存储对 FoxCentral.net Web Service
               的引用。
      foxcentral loData = new foxcentral();

      // 初始化要在此方法中使用的其他对象。
      string lcXML = "";
      string lcError = "";
      System.Data.DataSet oDS = new DataSet();
      bool lbError = false;

      // 将 ASP.NET 页可视属性上的服务器控件
         标签和 DataGrid 初始化为 False,
         以隐藏这些对象。
      outError.Text = "";
      outError.Visible = false;
      dgrNews.Visible = false;

      // 如果是第一次呈现该页。
      if (Page.IsPostBack == false)
      {
        // 将选定日期设置为今天的日期。
        calDate.SelectedDate=System.DateTime.Today;
      }

      try
      {
        // 调用 FoxCentral.net 的 GetItems 方法,传递用户
           输入的日期。
        lcXML = loData.GetItems(calDate.SelectedDate,0,0,"ALL");

        // 如果未返回数据,将引发异常。
        if (lcXML == "")
        {
          throw new Exception();
        }
      }
      
      catch(Exception ex)
      {
        // 如果发生异常,则在 ASP.NET 页上设置错误标签文本
           并显示该文本。
        lcError = "没有要检索的消息项";
        outError.Text = lcError;
        outError.Visible = true;
        return;
      }

      try
      {
        // 将 XML 读入 DataSet。
        oDS.ReadXml(new StringReader(lcXML));
      }
      catch(Exception ex)
      {
        // 如果发生异常,则获取对错误的引用并将 error 变量
           设置为 True。
        lcError = ex.ToString();
        lbError = true;
      }

      // 如果发生错误,则在 ASP.NET 页上设置错误标签文本
         并显示该文本。
      if (lbError)
      {
        outError.Text = lcError;
        outError.Visible = true;
        return;
      }
    
      // 将 DataView 对象设置为使用 XML
         创建的名为“News”的表。
      DataView oDataView = new DataView(oDS.Tables["News"]);

      // 将 DataGrid 源设置为 DataView。
      dgrNews.DataSource = oDataView;

      // 绑定 DataGrid。
      dgrNews.DataBind();

      // 显示 DataGrid。
      dgrNews.Visible = true;
    }
  

// 此方法是由 Visual Studio .NET 生成的。
    private void Page_Init(object sender, EventArgs e)
    {
      //
      // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
      //
      InitializeComponent();
    }

// 这段代码是由 Visual Studio .NET 生成的。
    #region Web 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
      private void InitializeComponent()
    {    
      this.calDate.SelectionChanged += new
      System.EventHandler(this.Page_Load);
      this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion
  }
}

示例 4:从 ASP.NET Web Service 访问 Visual FoxPro 数据
您可以创建访问 Visual FoxPro 7.0 数据的 ASP.NET Web service。Web service 定义了 CustomersInCountry() 方法,该方法在传递包含国家/地区名称的字符串时,使用 OLE DB 提供程序连接到 Visual FoxPro 7.0 数据库。然后,执行查询以检索指定国家/地区的客户的详细信息。如果返回数据,则将结果集打包为 XML 并返回给调用对象。

XML Web services 没有用户界面,因此本示例也没有 ASPx 文件。下面列出了使用 C# 编写的实现代码。

// 设置对类库的引用。类似于 Visual FoxPro 7.0 中的
   SET CLASSLIB TO。
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace VFP7WebServiceExample
{
  /// <summary>
  /// Service1 的摘要说明。
  /// </summary>
// 创建 ASP.NET Web Service。
  public class Service1 : System.Web.Services.WebService
  {
// 此方法是由 Visual Studio .NET 生成的。
    public Service1()
    {
      // CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的。
      InitializeComponent();
    }

// 这段代码是由 Visual Studio .NET 生成的。
    #region 组件设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
      private void InitializeComponent()
    {
    }
    #endregion

    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    }

// WebMethod 属性将该方法作为 Web Service 方法提供。
    [WebMethod]
// 此方法将国家/地区作为参数接受并以 XML 格式的字符串
   返回该国家/地区的所有客户记录。
    public string CustomersInCountry(string strCountry)
    {
      string cReturnString;

注意: OLE DB 提供程序连接字符串的规范包括一个完整的驱动器和路径声明,用于在默认位置存储示例数据。如果您的数据位于其他位置,请对以下行进行相应的修改。
      // 连接到 Visual FoxPro 数据库。
      String strConnection = @"provider=VFPOLEDB.1 ;data
      source='C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO
         7\SAMPLES\DATA\TESTDATA.DBC';password='';user id=''";
      OleDbConnection VFP7Connection = new OleDbConnection();
      VFP7Connection.ConnectionString = strConnection;
      VFP7Connection.Open();

      // 创建带 select 语句的 Command 对象。
      String strSelect = "SELECT * FROM customer WHERE
      upper(country)='" + strCountry.ToUpper() + "'";
      OleDbCommand VFP7SelectCommand = new
      OleDbCommand(strSelect,VFP7Connection);

      // 创建 DataAdapter。
      OleDbDataAdapter VFP7DataAdapter = new OleDbDataAdapter();
      VFP7DataAdapter.SelectCommand = VFP7SelectCommand;

      // 创建 DataSet。
      DataSet VFP7DataSet = new DataSet();

      // 使用表信息填充 DataSet。
      int iRecFound;
      iRecFound = VFP7DataAdapter.Fill(VFP7DataSet,"Customer");
      
      // 如果未找到客户记录,则返回空字符串。
      if (iRecFound==0)
      {
        cReturnString = "";
      }
      else
      {
        // 如果找到客户记录,则将 DataSet 结果
           写入 XML 并将其作为字符串返回。
        StringWriter cXML = new StringWriter();
        VFP7DataSet.WriteXml(cXML);
        cReturnString = cXML.ToString();
      }

      return cReturnString;
    }

  }
}

要通过 Visual FoxPro 7.0 使用此 Web service,首先应创建一个 Web service 实例,然后将其分配给一个本地对象引用,如以下代码所示:

LOCAL oCustomers as ASPDotNetWS
LOCAL loWS, lcRetStr

* 初始化 ASP.NET Web service。
loWS = NEWOBJECT("Wsclient",HOME()+"ffc\_webservices.vcx")
loWS.cWSName = "ASPDotNetWS"
oCustomers = loWS.SetupClient
   ("http://localhost/VFP7WebServiceExample/VFP7WebService.asmx?WSDL",
                               "Service1", "Service1Soap")

获得对 Web service 的对象引用后,便可以象调用实际本机 Visual FoxPro 对象一样调用其方法。Web service 以 XML 的形式返回结果,因此,为在 Visual FoxPro 7.0 中查看或使用该结果,我们需要使用 XMLTOCURSOR() 及以下代码将结果转换为本地游标。

* 将从 Web service 返回的 XML 转换为
* Visual FoxPro 7.0 游标并浏览其内容
STORE "" TO lcRetStr
lcRetStr = oCustomers.CustomersInCountry("GERMANY")
IF NOT EMPTY( lcRetStr )
  XMLTOCURSOR( lcRetStr,"CustomersGermany")
  BROWSE
ENDIF

当然,这里我们使用了 Visual FoxPro 7.0 来访问 Web service,但实际上我们可以使用任何能够创建对象并处理 XML 数据的开发工具。XML Web services 的精髓就在于它独立于语言(甚至平台)。

小结
Visual Studio .NET 为开发人员提供了一种使用新的 Web 窗体和 ASP.NET 技术(它们是 Microsoft .NET 框架的关键部分)开发应用程序的入口。Visual Studio .NET 提供了一个功能完备、集成的开发环境,并隐藏了管理各种工具所需的大多数复杂工作,从而使开发人员可以集中精力完成创建和部署应用程序的主要任务。对于 Visual FoxPro 7.0 开发人员来说,使用 Web 窗体和 ASP.NET 创建前端应用程序可以在以下三方面获得显著好处:

允许开发人员开发独立于平台的应用程序。与本机 Visual FoxPro 应用程序不同,ASP.NET 应用程序可以在浏览器中运行,并且不需要安装 Windows 平台。
允许开发人员远程访问 FoxPro 数据。使用在 ASP.NET 中开发的前端应用程序,可以在受控环境中提供 Visual FoxPro 数据,以便 Internet 上的用户可以查看并修改这些数据。
允许开发人员开发独立于设备的应用程序。ASP.NET 应用程序本身支持广泛的设备(包括蜂窝电话和 PDA)访问。
本文中的示例显示了 Visual FoxPro 7.0 如何以不同的方式轻松地与使用 Visual Studio .NET 中的 ASP.NET 创建的 Web 窗体相集成。随着新的 OLE DB 提供程序的问世和 Visual FoxPro 7.0 中引入的 XML 支持的增强,这种级别的集成已经成为可能。

但是,这决不仅仅是单向的交互。Visual FoxPro 7.0 可以轻松地创建以数据为中心的 XML Web services,这些服务很难使用数据和语言之间未紧密集成的工具来构建,而这一功能始终是 Visual FoxPro 的一项优势。

Visual FoxPro 7.0 还可用于创建中间层组件。由于 Visual FoxPro 7.0 全面支持 COM+ 服务,因而可以用来创建很容易从 Web 窗体中调用的数据密集型 COM 组件。这类组件既可以与本机 FoxPro 数据进行交流,也可以通过 OLE DB 与 SQL 数据库进行交流。

如本文所述,虽然 Visual FoxPro 7.0 不是 Visual Studio .NET 的一个组成部分,但这并不意味着它不能积极参与到基于 .NET 的环境中,并对该环境做出贡献。

有关 Visual FoxPro 的详细信息,请参阅 Microsoft Visual FoxPro(英文)主页。有关 ASP.NET 的详细信息,请参阅 Microsoft ASP.NET(英文)主页。

8 楼

你们好了
我是熊强
我想学....

9 楼

[em18][em18]怎么你给的那个网站不可以哟!!!!
打不开哦!!!!!!!!!!!!![em18][em17]

10 楼

无法上,,
看来是楼主有意取笑我们,

我来回复

您尚未登录,请登录后再回复。点此登录或注册