2012-09-01 75 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提供程序。

相關問題