Připojení k FoxPro tabulkám v C# pomocí ODBC

Petr Wiedemann, 8. srpen 2010

Pro otevření DBF souborů v C# můžeme použít ODBC ovladač pro Visual FoxPro. Podmínkou je jeho existence v systému. Ovladač je možné stáhnout na stránce Visual FoxPro ODBC Driver. Následující kousek kódu ukazuje, jak je možné otevřít DBF soubor a načíst jeho obsah.

class Dbf2
{
    public OdbcConnection Connect(string SourceDB)
    {
        try
        {
            OdbcConnection conn = new OdbcConnection();

            conn.ConnectionString =
                "Driver={Microsoft Visual FoxPro Driver};" +
                "SourceType=DBF;" +
                "SourceDB=" + SourceDB + ";" +
                "Exclusive=No";

            conn.Open();

            return conn;
        }
        catch (OdbcException e)
        {
            DisplayOdbcError(e);

            return null;
        }
    }

    private void DisplayOdbcError(OdbcException e)
    {
        string errorMessages = "";

        for (int i = 0; i < e.Errors.Count; i++)
        {
            errorMessages += "Index #" + i + "\n" +
                             "Message: " + e.Errors[i].Message + "\n" +
                             "NativeError: " + e.Errors[i].NativeError.ToString() + "\n" +
                             "Source: " + e.Errors[i].Source + "\n" +
                             "SQL: " + e.Errors[i].SQLState + "\n";
        }

        Console.WriteLine(errorMessages);
    }

    public void Run()
    {
        OdbcConnection conn = Connect("D:\\dbfdata");

        if (conn == null)
            return;

        try
        {
            string SQL = "SELECT * FROM dbfsoubor";

            OdbcCommand MyCommand = new OdbcCommand(SQL, conn);
            OdbcDataReader dr = MyCommand.ExecuteReader();

            while (dr.Read())
            {
                StringBuilder sb = new StringBuilder();
                for (int col = 0; col < dr.FieldCount; col++)
                {
                    sb.Append(dr[col].ToString().Trim());

                    if (col < dr.FieldCount - 1)
                        sb.Append(", ");
                }

                Console.WriteLine(sb.ToString());
            }

            dr.Close();
        }
        catch (OdbcException e)
        {
            DisplayOdbcError(e);
        }

        if (conn != null)
            conn.Close();
    }
}