2

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

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

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 的获取外部数据构建了连接字符串。

4

2 回答 2

2

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

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

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

  1. 从视图菜单中,选择服务器资源管理器。
  2. 在服务器资源管理器窗格中,右键单击数据连接,然后单击添加连接
  3. 在“数据链接属性”对话框中,单击“提供者”选项卡。
  4. 为 Visual FoxPro 选择 Microsoft OLE DB 提供程序。
  5. 将出现“数据链接属性”对话框中的“连接”选项卡。

如果这没有帮助,有一个 DDEX 提供程序,但它可能仅适用于特定版本的 Visual Studio。

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

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

http://vfpefprovider.codeplex.com/

瑞克

于 2012-09-01T13:45:02.353 回答
-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);
}

但是,主键数据表不会让您知道主键是否是 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);
}

顺便说一句... VfpClient 包括一个与VS2010 和VS2012 一起使用的DDEX 提供程序。

于 2012-09-04T18:43:19.770 回答