Список первичных ключей в Fox Pro с поставщиком OLE DB?

Как можно перечислить первичные ключи таблицы в Fox Pro с помощью поставщика OLE DB?

Используя 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 ответа

Решение

Я видел твой пост в твиттере. Я отвечаю на этот вопрос как разработчик VFP с очень небольшим опытом в Visual Studio и C#.

Не уверен, если вам нужны вещи программно или просто нужно получить детали. Вы пытались добавить базу данных в обозреватель серверов? В соответствии с файлом справки Visual FoxPro...

Чтобы подключиться к базе данных или таблице Visual FoxPro через поставщика OLE DB для Visual FoxPro Откройте Visual Studio.

  1. В меню "Вид" выберите "Обозреватель серверов".
  2. В панели обозревателя серверов щелкните правой кнопкой мыши Подключения данных и выберите Добавить подключение.
  3. В диалоговом окне "Свойства ссылки на данные" перейдите на вкладку "Поставщик".
  4. Выберите Microsoft OLE DB Provider для Visual FoxPro.
  5. Откроется вкладка Соединение в диалоговом окне Свойства связи с данными.

Если это бесполезно, существует поставщик DDEX, но он может работать только с определенной версией Visual Studio.

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

Если вы используете Entity Framework, есть поставщик:

http://vfpefprovider.codeplex.com/

стог

Вы можете получить Первичные и Внешние ключи из метода 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);
}

Кстати... VfpClient включает в себя провайдера DDEX, который работает с VS2010 и VS2012.

Другие вопросы по тегам