使用OLE DB提供程序在Fox Pro中列出主键?

时间:2012-09-01 01:55:43

标签: database primary-key foxpro visual-foxpro

如何使用OLE DB提供程序列出Fox Pro中表的主键?

使用C#并将我的构建切换到x86而不是x64我能够使用oledb提供程序为Fox Pro显示有关该表的一些信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;

namespace obtainFoxSchema
{
    class Program
    {
        static void Main(string[] args)
        {
            OleDbConnection connection = new OleDbConnection(
                "Provider=VFPOLEDB.1;Data Source=X:\\FREETABLES\\DATA;"
            );
            connection.Open();
            DataTable tables = connection.GetSchema(
                System.Data.OleDb.OleDbMetaDataCollectionNames.Tables
            );

            foreach (System.Data.DataRow rowTables in tables.Rows)
            {
                Console.Out.WriteLine(rowTables["table_name"].ToString());
                DataTable columns = connection.GetSchema(
                    System.Data.OleDb.OleDbMetaDataCollectionNames.Columns,
                    new String[] { null, null, rowTables["table_name"].ToString(), null }
                );
                foreach (System.Data.DataRow rowColumns in columns.Rows)
                {
                    Console.Out.WriteLine(
                        rowTables["table_name"].ToString() + "." +
                        rowColumns["column_name"].ToString() + " = " +
                        rowColumns["data_type"].ToString()
                    );
                }
            }
            Console.Out.WriteLine("stop");
        }
    }
}

但是我真的不知道在返回的对象中查找哪些主键或表之间的外键。

任何有关那种事情的想法?

是的,我在另一个问题中找到了这个代码,但我自己使用Excel 2007的Get External Data构建了连接字符串。

2 个答案:

答案 0 :(得分:2)

我在Twitter上看到了你的帖子。我作为VFP开发人员回答这个问题,他在Visual Studio和C#方面经验很少。

不确定您是否需要以编程方式获取内容或只是需要获取详细信息。您是否尝试将数据库添加到服务器资源管理器?根据Visual FoxPro帮助文件...

通过Visual FoxPro OLE DB提供程序连接到Visual FoxPro数据库或表 打开Visual Studio。

  1. 从“视图”菜单中,选择“服务器资源管理器”。
  2. 在“服务器资源管理器”窗格中,右键单击“数据连接”,然后单击“添加连接”
  3. 在“数据链接属性”对话框中,单击“提供程序”选项卡。
  4. 为Visual FoxPro选择Microsoft OLE DB提供程序。
  5. 将出现“数据链接属性”对话框中的“连接”选项卡。
  6. 如果这没有帮助,有一个DDEX提供程序,但它可能只适用于特定版本的Visual Studio。

    http://vfpx.codeplex.com/wikipage?title=Sedna&referringTitle=Home#DDEX

    如果您使用的是实体框架,则有一个提供商:

    http://vfpefprovider.codeplex.com/

    瑞克

答案 1 :(得分:-1)

您可以从connection.GetOleDbSchemaTable方法获取主键和外键。

示例:

using(var connection = new OleDbConnection(@"provider=vfpoledb;data source=c:\NorthwindData\Northwind.dbc")) {
    connection.Open();
    DataTable primaryKeys = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, null);
    DataTable foreignKeys = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, null);
}

但是,主键DataTable不会让您知道主键是否为AutoInc。如果您对获取VFP特定架构信息感兴趣,那么您可能希望尝试使用VfpClient而不是OleDb类。

VfpClient示例:

using(var connection = new VfpConnection(@"c:\NorthwindData\Northwind.dbc")) {
    connection.Open();
    DataTable primaryKeys = connection.GetSchema(VfpConnection.SchemaNames.PrimaryKeys);
    DataTable foreignKeys = connection.GetSchema(VfpConnection.SchemaNames.ForeignKeys);
}

btw ... VfpClient包含一个与VS2010和VS2012一起使用的DDEX提供程序。