web-dev-qa-db-fra.com

C # Lire des fichiers .DBF dans un datatable

J'ai besoin de me connecter à un fichier .dbf dans Visual Studio à l'aide de C # et de renseigner une table de données. Des idées? Je peux actuellement afficher les tables dans Visual Fox Pro 9.0

Code j'ai essayé et échoué, continue à obtenir

La table externe n'est pas au format attendu.

private OleDbConnection conn;
private OleDbCommand cmd;
private OleDbDataReader dr;
private string sqlStr = "";
private DataSet myDataSet;
private OleDbDataAdapter myAdapter;


void test2()
{
    conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\PC1\Documents\\Visual FoxPro Projects\\;Extended Properties=DBASE IV;");
    conn.Open();
    sqlStr = "Select * from Clients.dbf";
    //Make a DataSet object
    myDataSet = new DataSet();
    //Using the OleDbDataAdapter execute the query
    myAdapter = new OleDbDataAdapter(sqlStr, conn);
    //Build the Update and Delete SQL Statements
    OleDbCommandBuilder myBuilder = new OleDbCommandBuilder(myAdapter);         

    //Fill the DataSet with the Table 'bookstock'
    myAdapter.Fill(myDataSet, "somename");
    // Get  a FileStream object
    FileStream myFs = new FileStream
          ("myXmlData.xml", FileMode.OpenOrCreate, FileAccess.Write);
    // Use the WriteXml method of DataSet object to write XML file from the   DataSet
    //  myDs.WriteXml(myFs);
    myFs.Close();
    conn.Close();
}
6
TheCoder

Ce code a fonctionné pour moi!

public DataTable GetYourData()
    {
        DataTable YourResultSet = new DataTable();

        OleDbConnection yourConnectionHandler = new OleDbConnection(
            @"Provider=VFPOLEDB.1;Data Source=C:\Users\PC1\Documents\Visual FoxPro Projects\");

        // if including the full dbc (database container) reference, just tack that on
        //      OleDbConnection yourConnectionHandler = new OleDbConnection(
        //          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\NameOfYour.dbc;" );


        // Open the connection, and if open successfully, you can try to query it
        yourConnectionHandler.Open();

        if (yourConnectionHandler.State == ConnectionState.Open)
        {
            string mySQL = "select * from CLIENTS";  // dbf table name

            OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);
            OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);

            DA.Fill(YourResultSet);

            yourConnectionHandler.Close();
        }

        return YourResultSet;
    }
11
TheCoder

Les DBF Visual FoxPro sont des DBFPAS/ dBase IV et, en tant que tels, sont illisibles pour la plupart des versions du moteur de base de données Jet de Microsoft Access. (MSDN a quelques spécificités , si vous y tenez.)

Vous devez exporter le fichier DBF à partir de FoxPro au format dBase réel ou le faire ouvrir par C # à l'aide du fournisseur Visual FoxPro OLEDB.

Une fois le fournisseur installé, vous devez remplacer l’argument "Fournisseur" de votre chaîne de connexion par le suivant, en supposant que votre fichier DBF se trouve dans ce dossier.

Provider=VFPOLEDB.1;Data Source=C:\Users\PC1\Documents\Visual FoxPro Projects\;

(Utilisez un format de chaîne @ ""; vous avez oublié une barre oblique dans l'exemple de code, entre PC1 et Documents.)

0
DougM