Список первичных ключей в 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.
- В меню "Вид" выберите "Обозреватель серверов".
- В панели обозревателя серверов щелкните правой кнопкой мыши Подключения данных и выберите Добавить подключение.
- В диалоговом окне "Свойства ссылки на данные" перейдите на вкладку "Поставщик".
- Выберите Microsoft OLE DB Provider для Visual FoxPro.
- Откроется вкладка Соединение в диалоговом окне Свойства связи с данными.
Если это бесполезно, существует поставщик 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.