ASP.NET And Legacy MS-DOS Applications
I'm currently studying FoxPro 2.6. For MS-DOS. Yes, the company I am working for is still using applications written for FoxPro 2.6! I have to run this old MS-DOS database system in Virtual PC. So the last programming book I've read was Charles Siegel's Mastering FoxPro 2 written in 1991. The applications are completely undocumented (grrrr!) so my first step was to create a data dictionary (aka database schema). In FoxPro this can be done through the command DISPLAY STRUCTURE.
However, it is possible to connect to these old MS-DOS FoxPro database files using ASP.NET. First you will need the Microsoft OLE DB Provider for Visual FoxPro 9.0. It is important to realize that every table in a FoxPro database exists within its own DBX file with maybe a CDX file for the index. So to access a particular table you actually need to access a particular file location. I had to create folders for each table database and then set the data source as a folder:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.OleDb; using System.Data.Odbc; public partial class FoxPro_Query : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { try { OleDbConnection cn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Projects\\FoxPro\\WZ\\CLIENT;Collating Sequence=general;"); OleDbDataAdapter da = new OleDbDataAdapter("SELECT subid, fund_src, lname, fname, addr1, addr2, city, state, zip, phone_h, county, homeowner, notes, directions FROM CLIENT WHERE Lname = 'ROBBINS'", cn); DataTable objDataTable = new DataTable(); da.Fill(objDataTable); GridView1.DataSource = objDataTable; GridView1.DataBind(); cn.Close(); } catch (OleDbException ode) { lblErrorMessage.Text = ode.ToString(); } } }
It is also possible to get the schema of the FoxPro database table and bind it to a GridView for a web page version of the database structure.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.OleDb; using System.Data.Odbc; public partial class FoxPro : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { try { OleDbConnection cn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Projects\\FoxPro\\WZHSTDET;Collating Sequence=general;"); cn.Open(); DataTable objDataTable = new DataTable(); objDataTable = cn.GetSchema("Columns"); GridView1.DataSource = objDataTable; GridView1.DataBind(); cn.Close(); } catch (OleDbException ode) { lblErrorMessage.Text = ode.ToString(); } } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[2].Text = Enum.GetName(typeof(OleDbType), Convert.ToInt32(e.Row.Cells[2].Text)); } } }
Hopefully this is just the first step in getting these applications off of MS-DOS FoxPro 2.6 and onto a more contemporary development framework. The current system seems to give its users a lot of headaches.