-->

FoxPro Database and asp.net

2019-07-30 16:11发布

问题:

I have a website that uses asp.net 3.5 and Sql server 2008 as backend data store . now we want to add a new page to our website . but the data that we want to share in this page is already being created and saved by a FoxPro software in one of our local systems.

I've no experience in FoxPro . is there any way to use this data in our site ? specially without being have to create a new database in server and importing or writing all records all over again ? what is the best way in such a situation ?

by the way , is it possible to change the extension of a FoxPro database or not ? something like Database.customExt ?

回答1:

You can connect to a FoxPro database using an OLEDB datasource in ADO.NET. It's up to you whether you feel the need to import the data into SQL Server or just access it directly in FoxPro. It would depend on whether you want to join the data with the SQL Server data in queries for one thing.



回答2:

In addition to the answers that you already got. You might be interested in using LINQ to VFP or VFP Entity Framwork Provider to make the data access even easier by using LINQ.



回答3:

You could create a linked server to this Foxpro Database.

Also, Foxpro tables can have any extension. However, you'll have to specify the extension when using the table or database. For Example:

OPEN DATABASE MyFoxProDatabase.customExt
USE mytable.custonExt


回答4:

You have several options for structuring your data access to FoxPro. You can put the ADO.NET data access code in the codebehind, in it's own c# library or use the objectdatasource for 2 way binding.

private void LoadData(string parameter)
{
    string sql = "SELECT a.myfield FROM mytable.customExt a WHERE a.whereField=?";
    using(OleDbConnection conn = new OleDbConnection(myConnectionString))
    {
        using (OleDbCommand command = new OleDbCommand(sql, conn))
        {
            command.Parameters.AddWithValue("@Parameter", parameter);

            try
            {
                conn.Open();
                using(OleDbDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    myGridView.DataSource = dr;
                    myGridView.DataBind();
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}

Here is a sample connection string to use in web.config:

<add name="myData" connectionString="Provider=VFPOLEDB.1;Data Source=C:\MyFiles\" providerName="System.Data.OleDb"/>

I belive ou can use a custom extension to your FoxPro tables and databases. All your SQL statements would then need to explicitly use that extension.

SELECT t.MyField FROM MyTable.customExt t


回答5:

While you can change the extension for a Visual FoxPro table, that only affects the DBF file. If the table has any memo fields, there's an associated FPT file, for which you can't change the extension. Similarly, if the table has an associated index file, it must have a CDX extension.

So, if the reason you want to change the extension is to allow multiple tables with the same filestem, don't. It's a good way to really mess things up.