【问题标题】:Listing primary keys in Fox Pro with the OLE DB Provider?使用 OLE DB 提供程序在 Fox Pro 中列出主键?
【发布时间】:2012-09-01 01:55:43
【问题描述】:

如何使用 OLE DB Provider 在 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 的获取外部数据构建了连接字符串。

【问题讨论】:

  • 我没有 FoxPro 可以使用...但是我有 SQL Server...

标签: database primary-key foxpro visual-foxpro


【解决方案1】:

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

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

通过 Visual FoxPro OLE DB Provider 连接到 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/

瑞克

【讨论】:

  • 听起来值得一试!谢谢!
  • 嗯,我使用的是 VS 2008,所以我想它与您的说明有点不同,但它似乎至少列出了表格。 (虽然他们似乎没有让我吃惊的主键)但我将不得不尝试你的其他两个建议。然而,VS 2008 在列出数据方面似乎真的很快。
  • 在 FoxPro for DOS 和 FoxPro for Windows 上构建的旧应用程序可能正在使用“空闲表”,这些表不包含在数据库容器 (DBC) 中。甚至 VFP 应用程序也可以使用空闲表。这些文件没有主键或候选键,因为它们仅在 DBC 中可用。
  • 你们确实意识到不可能让 64 位进程支持 Visual Fox Pro 对吧?如果您打算使用 64 位操作系统,您确实应该使用支持 64 位的数据库后端。建议 VFP 解决方案应该是犯罪行为。在没有正当理由的情况下倒退似乎很愚蠢。
  • @Ramhound 这是我正在开发的遗留系统。他们正在远离它,但与此同时,这就是他们所使用的。
【解决方案2】:

您可以从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 提供程序。

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多