2012-09-01 43 views
2

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

使用C#和交换我生成的x86,而不是64,我能够使用OLEDB提供福克斯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

我没有FoxPro与...一起工作...但我有SQL Server ... – leeand00

回答

2

我在Twitter上看到了你的帖子。我以VFP开发人员的身份回答了这个问题,在Visual Studio和C#中很少有经验。

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

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

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

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

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

如果您使用的是实体框架,有一个供应商:

http://vfpefprovider.codeplex.com/

里克

+0

听起来像是值得一试!谢谢! – leeand00

+0

嗯,我使用的是VS 2008,所以我想这与您的指示有点不同,但似乎至少列出了这些表格。 (虽然他们似乎没有让我感到震惊的主键)但是我将不得不尝试其他两个建议。然而VS 2008在列出数据方面似乎非常快速。 – leeand00

+1

构建于FoxPro for DOS和FoxPro for Windows上的旧应用程序可能使用“自由表”,它们不包含在数据库容器(DBC)中。即使VFP应用程序也可以使用空闲表。这些文件不具有主键或候选键,因为它们仅在DBC中可用。 –

-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不会让你知道,如果一个主键是一个自动递增。如果你有兴趣获得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提供程序。

相关问题