How to read/write dBase III files using C#/.NET ODBC or OLE?

后端 未结 5 775
鱼传尺愫
鱼传尺愫 2020-12-16 04:03

I have searched for various techniques on how to read/write dBase III (dbf) files using OLEDB or ODBC with C#/.NET. I have tried almost all of the tecniques posted, but wit

5条回答
  •  失恋的感觉
    2020-12-16 04:45

    I realize this is an old thread, but in case someone gets here by google (like I have few days ago).. As I wrote here, the elegant solution is to use LINQ to VFP to read from and write to DBF files. I tested it with some dBase III files. It goes like this:

    You define your table to match the DBF definition like this:

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

    You define the context like this:

    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 MyTables 
        {
            get { return this.GetTable(); }
        }
    }
    

    You define context attributes like this:

    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 MyTables 
        {
            get { return base.MyTables; }
        }
    }
    

    You also need a connection string, you can define it in app.config like this (Data\ relative path is used as the source of DBF files in this case):

    
      
    
    

    And finally, you can perform reading and writing to and from DBF files as simple as:

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

提交回复
热议问题