Как читать/записывать файлы dBase III с помощью C#/.NET ODBC или OLE?

Я искал различные методы чтения/записи файлов dBase III (dbf) с использованием OLEDB или ODBC с C#/.NET. Я пробовал почти все техники, опубликованные, но безуспешно. Может ли кто-нибудь указать мне в правильном направлении?

Спасибо за ваше время.


person JP Richardson    schedule 16.09.2008    source источник


Ответы (5)


Что-то типа ... ?

 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

person Fionnuala    schedule 16.09.2008
comment
Вы также можете создать ODBC DSN для подключения в панели управления, а затем подключиться к нему в своем коде. - person runako; 23.04.2009

Я понимаю, что это старая ветка, но на случай, если кто-то попадет сюда через Google (как я несколько дней назад). Как я уже писал здесь элегантное решение — использовать 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);
}
person Dejan Janjušević    schedule 08.05.2012
comment
я пытался запустить ваш код, но он выдает Could not load type 'LinqToVfp.VfpQueryProvider' from assembly 'LinqToVFP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. эту ошибку. есть идеи, как это решить? - person th1rdey3; 19.12.2012

Файлы FoxPro 2.0 были точно такими же, как файлы dBase III, с дополнительным битом для любого поля типа «памятка» (точное имя не знаю, это было давно). Это означает, что если вы просто используете метод FoxPro 2.x для доступа к файлам, должно сработать.

person Kearns    schedule 16.09.2008

Это хороший подход, я не проверял, но скоро...

http://www.c-sharpcorner.com/uploadfile/rfederico/xbaseenginerfv12022005011623am/xbaseenginerfv.aspx

person Community    schedule 23.04.2009

Я предложил много ответов о работе с файлами базы данных (в частности, с VFP, но поставщик Microsoft VFP OleDb распознает старые файлы базы данных. Вы можете выполнить поиск, чтобы найти больше этих ссылок через:

пользователь: 74195 [vfp] [oledb]

Во-первых, я бы начал с получения поставщика Microsoft VFP OleDb скачать.

Далее, если у вас уже есть файлы dbf, к которым вы пытаетесь подключиться для тестирования, вам необходимо установить соединение. Соединение должно указывать на ПУТЬ, где находятся файлы, а не на конкретный файл .dbf. Итак, если у вас есть папка с 20 таблицами в ней, после подключения к PATH вы можете запрашивать из любой/всех таблиц с помощью стандартного синтаксиса VFP-SQL (общая структура для многих sql, но отличается в зависимости от некоторых функций). например, манипуляции со строками, датами и числами).

Узнайте о ПАРАМЕТРИЗАЦИИ запросов. В VFP OleDb параметры задаются с помощью "?" в качестве заполнителя, поэтому параметры необходимо добавлять в той же последовательности, в которой они появляются в запросе. "?" могут отображаться как значения полей, условия соединения, где критерии и т. д.

Ниже приведены НЕСКОЛЬКО того, что поможет вам начать НАДЕЮСЬ, что вы начнете с действительного соединения, запроса, а затем вставки/обновления/удаления с параметрами.

  1. Пример, показывающий строку подключения и простой запрос из таблицы

  2. Показывает параметризованную sql-вставку, но в этом случае получает данные из другого источника данных, такого как sql-сервер, и создает из него таблицу стилей VFP/dbf. Он циклически перебирает записи, извлекает значения для каждого параметра и вставляет их.

  3. и другой, показывающий параметризованное обновление SQL

Удачи, и есть много других, кто отвечает на VFP и OleDb Access, это лишь некоторые из тех, в которых я специально участвовал и показываю функциональные реализации, которые могут иметь что-то, что вы могли бы пропустить в противном случае.

person DRapp    schedule 23.04.2016