Как читать / записывать файлы dBase III, используя C#/.NET ODBC или OLE?
Я искал различные методы для чтения / записи файлов dBase III (dbf) с использованием OLEDB или ODBC с C#/.NET. Я испробовал почти все опубликованные методы, но безуспешно. Может ли кто-нибудь указать мне правильное направление?
Спасибо за ваше время.
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()
Я понимаю, что это старая ветка, но в случае, если кто-то попадет сюда через 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);
}
Файлы FoxPro 2.0 были точно такими же, как и файлы dBase III, с дополнительным битом для любого поля, имеющего тип "memo" (не знаю, какое именно имя, уже давно). Это означает, что если вы просто используете метод FoxPro 2.x для доступа к файлам, он должен работать.
Я предложил много ответов по работе с файлами базы данных (в частности, с VFP, но провайдер Microsoft VFP OleDb распознает более старые файлы dbase. Вы можете выполнить поиск, чтобы найти больше этих ссылок через:
Пользователь:74195[VFP] [OLEDB]
Во-первых, я бы начал с загрузки поставщика VFP Microsoft VFP.
Далее, если у вас уже есть файлы dbf, к которым вы пытаетесь подключиться для тестирования, вам нужно установить соединение. Соединение должно указывать на путь, где находятся файлы, а не на конкретный файл.dbf. Таким образом, если у вас есть папка с 20 таблицами в ней, после подключения к PATH вы можете запросить из любой / всех таблиц стандартный синтаксис VFP-SQL (общий для многих sql общая структура, но различающийся в зависимости от некоторых функций). как строки, дата и число манипуляций).
Узнайте о параметризации ваших запросов. С VFP OleDb параметры делаются с "?" символ как заполнитель, поэтому параметры должны быть добавлены в той же последовательности, в какой они появляются в запросе. "?" могут отображаться как значения полей, условия соединения, где критерии и т. д.
Следующее - НЕСКОЛЬКО, чтобы вы начали НАДЕЖДУ, чтобы вы начали с действительного соединения, запросите, затем вставьте / обновите / удалите с параметрами.
Пример, показывающий строку подключения и простой запрос из таблицы
Показывает параметризованный sql-insert, но в этом случае получает данные из другого источника данных, такого как sql-server, и создает из него таблицу стилей VFP/dbf. Он проходит по циклу записи и извлечения значений для каждого параметра и вставки.
Удачи, и есть много других, кто отвечает на VFP и OleDb Access, это только те, в которых я специально участвовал, и показывают функциональные реализации, которые могут иметь что-то, что вы могли бы пропустить.
Это хороший подход, я не проверял, но я скоро...
http://www.c-sharpcorner.com/uploadfile/rfederico/xbaseenginerfv12022005011623am/xbaseenginerfv.aspx