如何使用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构建了连接字符串。
答案 0 :(得分:2)
我在Twitter上看到了你的帖子。我作为VFP开发人员回答这个问题,他在Visual Studio和C#方面经验很少。
不确定您是否需要以编程方式获取内容或只是需要获取详细信息。您是否尝试将数据库添加到服务器资源管理器?根据Visual FoxPro帮助文件...
通过Visual FoxPro OLE DB提供程序连接到Visual FoxPro数据库或表 打开Visual Studio。
如果这没有帮助,有一个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提供程序。