2008-09-16 16 views
8

C#/ .NETでOLEDBまたはODBCを使用してdBase III(dbf)ファイルを読み書きする方法に関するさまざまなテクニックを検索しました。私はほとんどすべてのテクニックを掲載しましたが、成功しませんでした。誰かが私を正しい方向に向けることができますか?C#/ .NET ODBCまたはOLEを使用してdBase IIIファイルを読み書きする方法?

お時間をいただきありがとうございます。

答えて

2

のFoxPro 2.0ファイルのタイプがいたすべてのフィールドのための余分なビットを「メモ」のdBase IIIファイルとまったく同じであった(正確な名前がわからない、それはしばらくしています)。つまり、ファイルにアクセスするためにFoxPro 2.x methodを使用するだけで動作するはずです。

8

のような何か...?

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() 

から:http://bytes.com/forum/thread112085.html

+0

また、コントロールパネルの接続にODBC DSNを作成し、コード内の接続に接続することもできます。 – runako

6

、 (私は数日前に持っているように)私はhereを書いたようものの場合には、誰かがエレガントなソリューションをから読み取られ、DBFファイルへの書き込みにLINQ to VFPを使用することです.. Googleが、ここで取得します。私はいくつかのdBase IIIファイルでそれをテストしました。それはこのように書きます:あなたはこのようにコンテキストを定義

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>(); } 
    } 
} 

あなたは、コンテキストは次のように属性を定義します。

は、次のようなDBFの定義に合わせてテーブルを定義

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); 
} 
+1

あなたのコードを実行しようとしましたが、 'LinqToVfp.VfpQueryProvider 'を' LinqToVFP、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null 'というアセンブリからロードできませんでした。任意のアイデアをどのようにこれを解決するには? – th1rdey3

0

私が持っていますデータベースファイル(具体的にはVFP)での作業について多くの回答を提供しましたが、Microsoft VFP OleDbプロバイダは古いdbaseファイルを認識します。あなたはこれらのリンクを経由しての多くを見つけるために検索を行うことができます。

ユーザー:74195 [VFP] [OLEDB]

まず、私はMicrosoft VFP OleDb Providerダウンロードを取得して起動します。あなたはすでにあなたがテストのために接続しようとしているいくつかのdbfファイルがある場合

次に、あなたは、接続を確立する必要があります。接続は、特定の.dbfファイルではなく、ファイルが配置されているPATHを指している必要があります。したがって、20個のテーブルを持つフォルダがある場合は、PATHに接続すると、標準のVFP-SQL構文(多くのSQLでは全体の構造は共通ですが、一部の関数文字列、日付、数字の操作など)。

は、クエリをパラメータ化について学びます。VFP OleDbでは、パラメータは "?"文字をプレースホルダとして使用するため、クエリに表示される順序とまったく同じ順序でパラメータを追加する必要があります。 「?」フィールド値、ジョイン条件、条件などとして表示することができます。

以下は、有効な接続、クエリ、パラメータの挿入/更新/削除を簡単に開始できるようにするためのものです。

  1. Sample showing a connection string and simple query from a table

  2. Shows a parameterized sql-insertこの場合には、このようなSQLサーバ、そこからVFP/DBFスタイルテーブルを作成するように、別のデータソースからデータを取得します。レコードを循環し、各パラメータの値を引き出して挿入します。

  3. and another showing parameterized SQL-update

幸運、およびVFPおよびOLEDBアクセスに答える他の人の多くがあるが、これらは、私は、具体的に参加し、あなたがかもしれない何かを持っていることがあり、機能の実装を示していることのほんの一部ですそうでなければ見逃しているかもしれません。

関連する問題