Создайте .DBF в C # коде, который читается из Excel (VFP или нет) - PullRequest
2 голосов
/ 25 августа 2010

ЯЗЫК: C #, Система: Windows7, Excel 2007

Я хочу создать .DBF из некоторых данных, и я хочу открыть его из Excel 2007. Это может быть либо dBase, либо foxpro.В настоящее время я делаю в FoxPro9 (кстати, этот код из Интернета):

 OleDbConnection con = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Temp\\;");
            con.Open();
            OleDbCommand cmd1 = new OleDbCommand("Create Table TestDBF (Field1 I, Field2 C(10))", con);
            OleDbCommand cmd2 = new OleDbCommand("Insert Into TestDBF Values (1, 'Hello')", con);
            OleDbCommand cmd3 = new OleDbCommand("Insert Into TestDBF Values (2, 'World')", con);
            cmd1.ExecuteNonQuery();
            cmd2.ExecuteNonQuery();
            cmd3.ExecuteNonQuery();
            con.Close();

Это генерирует файл, который я могу открыть в DbfViewer, однако я не могу открыть его в Excel 2007 или использовать в некоторыхприложения у меня есть.Я могу вручную преобразовать FoxPro .dbf в dbaseIII dbf, используя DbfViwer, но я хочу, чтобы он был автоматическим.

Есть идеи?

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 26 августа 2010

Вот небольшое консольное приложение, которое создает DBF с использованием синтаксиса CREATE TABLE SQL, а затем копирует его в предыдущую версию формата файла FoxPro DBF, который можно открыть в Excel.

static void Main(string[] args)
{
    Console.WriteLine("Starting program execution...");

    string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\YourDirectory\";

    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        using (OleDbCommand scriptCommand = connection.CreateCommand())
        {
            connection.Open();

            string vfpScript = @"Create Table TestDBF (Field1 I, Field2 C(10))
                                USE TestDBF
                                COPY TO OpensWithExcel TYPE Fox2x
                                USE";

            scriptCommand.CommandType = CommandType.StoredProcedure;
            scriptCommand.CommandText = "ExecScript";
            scriptCommand.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript;
            scriptCommand.ExecuteNonQuery();
        }
    }

    Console.WriteLine("End program execution...");
    Console.WriteLine("Press any key to continue");
    Console.ReadLine();
}

}

0 голосов
/ 25 августа 2010
        OleDbConnection con = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Temp\\;");
        con.Open();
        OleDbCommand cmd1 = new OleDbCommand("Create Table TestDBF (Field1 I, Field2 C(10))", con);
        OleDbCommand cmd2 = new OleDbCommand("Insert Into TestDBF Values (1, 'Hello')", con);
        OleDbCommand cmd3 = new OleDbCommand("Insert Into TestDBF Values (2, 'World')", con);
0 голосов
/ 25 августа 2010

С VFP напрямую, это просто ...

use YourTable
Copy To SomeFile type XLS
...