C#/。NETでOLEDBまたはODBCを使用してdBase III(dbf)ファイルを読み書きする方法に関するさまざまな手法を検索しました。投稿されたほとんどすべてのテクニックを試しましたが、成功しませんでした。誰かが私を正しい方向に向けることができますか?
御時間ありがとうございます。
何かのようなもの ... ?
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=e:\My Documents\dBase;Extended Properties=dBase III"
Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString )
dBaseConnection.Open()
これは古いスレッドだと思いますが、誰かがグーグルでここに来た場合に備えて(私が数日前に持っていたように).ここに書いたように、洗練された解決策はLINQ to VFPを使用してDBFファイルを読み書きすることです。いくつかの dBase III ファイルでテストしました。こんなふうになります:
次のように、DBF 定義に一致するようにテーブルを定義します。
public partial class MyTable
{
public System.Int32 ID { get; set; }
public System.Decimal Field1 { get; set; }
public System.String Field2 { get; set; }
public System.String Field3 { get; set; }
}
次のようにコンテキストを定義します。
public partial class Context : DbEntityContextBase
{
public Context(string connectionString)
: this(connectionString, typeof(ContextAttributes).FullName)
{
}
public Context(string connectionString, string mappingId)
: this(VfpQueryProvider.Create(connectionString, mappingId))
{
}
public Context(VfpQueryProvider provider)
: base(provider)
{
}
public virtual IEntityTable<MyTable> MyTables
{
get { return this.GetTable<MyTable>(); }
}
}
次のようにコンテキスト属性を定義します。
public partial class ContextAttributes : Context
{
public ContextAttributes(string connectionString)
: base(connectionString) {
}
[Table(Name="mytable")]
[Column(Member="ID", IsPrimaryKey=true)]
[Column(Member="Field1")]
[Column(Member="Field2")]
[Column(Member="Field3")]
public override IEntityTable<MyTable> MyTables
{
get { return base.MyTables; }
}
}
接続文字列も必要です。app.config で次のように定義できます (Data\
この場合、DBF ファイルのソースとして相対パスが使用されます)。
<connectionStrings>
<add name="VfpData" providerName="System.Data.OleDb"
connectionString="Provider=VFPOLEDB.1;Data Source=Data\;"/>
</connectionStrings>
そして最後に、次のように簡単に DBF ファイルの読み書きを実行できます。
// Construct a new context
var context = new Context(ConfigurationManager.ConnectionStrings["VfpData"].ConnectionString);
// Write to MyTable.dbf
var my = new MyTable
{
ID = 1,
Field1 = 10,
Field2 = "foo",
Field3 = "bar"
}
context.MyTables.Insert(my);
// Read from MyTable.dbf
Console.WriteLine("Count: " + context.MyTables.Count());
foreach (var o in context.MyTables)
{
Console.WriteLine(o.Field2 + " " + o.Field3);
}
FoxPro 2.0 ファイルは、dBase III ファイルとまったく同じで、タイプが「メモ」のフィールドに余分なビットが追加されていました (正確な名前は不明です。しばらく経っています)。つまり、FoxPro 2.x メソッドを使用してファイルにアクセスするだけで機能するはずです。
これは素晴らしいアプローチです。私はテストしていませんが、すぐに...
http://www.c-sharpcorner.com/uploadfile/rfederico/xbaseenginerfv12022005011623am/xbaseenginerfv.aspx
データベース ファイル (より具体的には VFP ですが、Microsoft VFP OleDb プロバイダーは古い dbase ファイルを認識します。これらのリンクの詳細については、次の方法で検索できます。
ユーザー:74195[vfp][oledb]
まず、Microsoft VFP OleDb Providerのダウンロードを取得することから始めます。
次に、テストのために接続しようとしている dbf ファイルが既にいくつかある場合は、接続を確立する必要があります。接続は、特定の .dbf ファイルではなく、ファイルが配置されている PATH を指している必要があります。そのため、20 個のテーブルを含むフォルダーがある場合、一度 PATH に接続すると、標準の VFP-SQL 構文を介して任意/すべてのテーブルからクエリを実行できます (多くの SQL 全体構造に共通ですが、一部の関数に基づいて異なります)。文字列、日付、数値の操作など)。
クエリのパラメータ化について学びます。VFP OleDb では、パラメータは「?」で指定します。そのため、クエリに表示されるのとまったく同じ順序でパラメーターを追加する必要があります。「?」フィールド値、結合条件、基準などとして表示できます。
以下は、有効な接続、クエリ、およびパラメーターを使用した挿入/更新/削除を開始できることを願っています。
パラメータ化された sql-insert を示していますが、この場合は、sql-server などの別のデータ ソースからデータを取得し、そこから VFP/dbf スタイル テーブルを作成しています。レコードを巡回し、各パラメーターの値を取得して挿入します。
幸運を祈るとともに、VFP と OleDb Access について回答している他の多くの人がいます。これらは私が特に参加した一部であり、他の方法では見逃した可能性がある機能の実装を示しています。