2

OLE DB プロバイダーを使用して Fox Pro でテーブルの主キーを一覧表示するにはどうすればよいですか?

C# を使用し、ビルドを x64 ではなく x86 に切り替えると、Fox Pro の oledb プロバイダーを使用してテーブルに関する情報を表示できました。

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 を使用して自分で接続文字列を作成しました。

4

2 に答える 2

2

Twitterであなたの投稿を見ました。Visual Studio と C# の経験がほとんどない VFP 開発者として、この質問に答えています。

プログラムで必要なのか、詳細を取得する必要があるのか​​ わかりません。データベースをサーバー エクスプローラーに追加しようとしましたか? Visual FoxPro ヘルプ ファイルによると...

Visual FoxPro OLE DB プロバイダーを介して Visual FoxPro データベースまたはテーブルに接続するには Visual Studio を開きます。

  1. [表示] メニューから、[サーバー エクスプローラー] を選択します。
  2. サーバー エクスプローラー ウィンドウで、[データ接続] を右クリックし、[接続の追加] をクリックします。
  3. [データ リンク プロパティ] ダイアログ ボックスで、[プロバイダー] タブをクリックします。
  4. Visual FoxPro の Microsoft OLE DB プロバイダーを選択します。
  5. [データ リンク プロパティ] ダイアログ ボックスの [接続] タブが表示されます。

これが役に立たない場合は、DDEX プロバイダーがありますが、特定のバージョンの Visual Studio でしか機能しない場合があります。

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

Entity Framework を使用している場合は、プロバイダーがあります。

http://vfpefprovider.codeplex.com/

リック

于 2012-09-01T13:45:02.353 に答える
-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);
}

ただし、Primary Keys DataTable は、Primary Key が AutoInc であるかどうかを通知しません。VFP 固有のスキーマ情報を取得することに関心がある場合は、OleDb クラスの代わりに VfpClientを使用してみてください。

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 プロバイダーが含まれています。

于 2012-09-04T18:43:19.770 に答える