Как читать / записывать файлы dBase III, используя C # /. NET ODBC или OLE? - PullRequest
8 голосов
/ 16 сентября 2008

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

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

Ответы [ 5 ]

8 голосов
/ 16 сентября 2008

Что-то вроде ...?

 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

6 голосов
/ 08 мая 2012

Я понимаю, что это старая ветка, но в случае, если кто-то попадет сюда через Google (как я сделал несколько дней назад) .. Как я уже писал здесь , элегантное решение заключается в использовании LINQ в 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);
}
2 голосов
/ 16 сентября 2008

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

0 голосов
/ 23 апреля 2016

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

Пользователь: 74195 [VFP] [OLEDB]

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

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

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

Следующее - НЕСКОЛЬКО, чтобы начать НАДЕЖДУ, чтобы начать работу с действительным соединением, запросить, затем вставить / обновить / удалить с параметрами.

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

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

  3. и еще одно отображение параметризованного SQL-обновления

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

0 голосов
/ 23 апреля 2009

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

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

...