2008-09-16 12 views

Odpowiedz

2

Pliki FoxPro 2.0 były dokładnie takie same jak pliki dBase III z dodatkowym bitem dla dowolnego pola, które było typu "memo" (nie jestem pewien dokładnej nazwy, minęło trochę czasu). Oznacza to, że jeśli po prostu użyjesz FoxPro 2.x method do uzyskania dostępu do plików, to powinno działać.

8

Coś jak ...?

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

Od: http://bytes.com/forum/thread112085.html

+0

Można także utworzyć numer DSN ODBC dla połączenia w Panelu sterowania, a następnie połączyć się z tym w kodzie. – runako

6

Zdaję sobie sprawę, że jest to stary wątek, ale na wypadek, gdyby ktoś dostał się tutaj przez google (tak jak ja miałem kilka dni temu). Jak napisałem here, eleganckim rozwiązaniem jest użycie LINQ to VFP do odczytu i zapisu do plików DBF. Testowałem to z niektórymi plikami dBase III. To idzie tak:

zdefiniować tabelę, aby dopasować definicję DBF takiego:

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

zdefiniować kontekst tak:

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

zdefiniować atrybuty kontekstu tak:

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

Potrzebny jest również ciąg połączenia, można go zdefiniować w app.config w ten sposób (Data\ względna ścieżka jest używana jako źródło plików DBF w tym przypadku):

<connectionStrings> 
    <add name="VfpData" providerName="System.Data.OleDb" 
    connectionString="Provider=VFPOLEDB.1;Data Source=Data\;"/> 
</connectionStrings> 

I wreszcie, można wykonać czytania i pisania do iz DBF plików proste:

// 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

próbowałem uruchomić twój kod, ale daje to "Nie można załadować typu" LinqToVfp.VfpQueryProvider "z zestawu" LinqToVFP, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'. " jakieś pomysły, jak to rozwiązać? – th1rdey3

0

mam oferował wiele odpowiedzi na temat pracy z plikami baz danych (dokładniej VFP, ale dostawca Microsoft VFP OleDb rozpoznaje starsze pliki dbase. Można zrobić wyszukiwania, aby znaleźć więcej z tych linków poprzez:

użytkownika: 74.195 [VFP] [OLEDB]

Po pierwsze, chciałbym zacząć coraz Microsoft VFP OleDb Provider pobieranie.

Następnie, jeśli masz już jakieś pliki dbf, z którymi próbujesz się połączyć w celu przetestowania, musisz nawiązać połączenie. Połączenie musi wskazywać na ścieżkę PATH, w której znajdują się pliki, a nie na konkretny plik .dbf. Tak więc, jeśli posiadasz folder z 20 tabelami, po połączeniu się z PATH, możesz zapytać z dowolnej/wszystkich tabel za pomocą standardowej składni VFP-SQL (wspólne z wieloma sql ogólną strukturą, ale różne w zależności od niektórych funkcji jak ciąg, data i liczba manipulacji).

Dowiedz się więcej o PARAMETRYZACJI swoich zapytań.W przypadku VFP OleDb parametry są wykonywane za pomocą znaku "?" znak jako obiekt zastępczy, więc parametry muszą być dodane w dokładnie takiej samej kolejności, w jakiej pojawiają się w zapytaniu. "?" mogą pojawiać się jako wartości pól, warunki łączenia, kryteria itp.

Poniżej znajduje się KILKA, abyś mógł zacząć NADZIEJA zacząć od prawidłowego połączenia, zapytania, a następnie wstawiania/aktualizacji/usuwania za pomocą parametrów.

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

  2. Shows a parameterized sql-insert ale w tym przypadku pobiera dane z innego źródła danych, takie jak SQL-serwer i tworzenie tabeli stylów VFP/DBF od niego. Przechodzi cyklicznie przez zapisy i wartości ciągłe dla każdego parametru i wstawia.

  3. and another showing parameterized SQL-update

Powodzenia, i istnieje wiele innych, którzy odpowiedzą na VFP i OleDB Access, to tylko niektóre, że mam specjalnie uczestniczyła i pokazać funkcjonalne implementacje, które mogą mieć coś maja w przeciwnym razie mogłeś przegapić.

Powiązane problemy