【问题标题】:Create .DBF in C# code that is readable from Excel (VFP or not)在 C# 代码中创建可从 Excel 读取的 .DBF(VFP 或非 VFP)
【发布时间】:2010-08-25 07:11:51
【问题描述】:

语言: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 中打开它,也无法在我拥有的某些应用程序中使用。我可以使用 DbfViwer 手动将 FoxPro .dbf 转换为 dbaseIII dbf,但我希望它是自动的。

有什么想法吗?

提前致谢

【问题讨论】:

    标签: c# excel visual-foxpro dbf dbase


    【解决方案1】:

    这是一个小控制台应用程序,它将使用 CREATE TABLE SQL 语法创建 DBF,然后将其复制到可以在 Excel 中打开的 FoxPro DBF 文件格式的早期版本。

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

    }

    【讨论】:

      【解决方案2】:

      直接从VFP,很简单...

      use YourTable
      Copy To SomeFile type XLS
      

      【讨论】:

      • 直接从 VFP 是什么意思?我不明白你的代码。我对 VFP 知之甚少。
      • type XLS 不会创建 DBF
      • 是的,不开玩笑...但是如果他想要 Excel 中的结果,可以很容易地从 DBF 转储到 Excel 可以轻松读取的内容中。如果你真的想收回一点,你可以创建和 ODBC 连接到一个空闲的表或数据库,然后 Excel 可以通过该连接打开一个查询数据。他的最终结果是通过 Excel 获得访问权限,而由于微软的智慧和删除此类访问权限,您必须走弯路。
      • @WoF_Angel,从您的评论中说“...目前在 FoxPro9 中做...”,这暗示我您可以使用 VFP9 开发环境。如果您进入命令窗口并键入两个命令,它将使用(打开)一个文件(无论您的 .DBF 文件在哪里)。然后 Copy to (some other file name) type XLS 告诉 VFP 将所有记录复制成 Excel 可以直接读取的格式。
      • 好吧,我可以使用 .xls 文件,尽管我更喜欢 DBF DBASE III 文件。有没有办法将 VFP 9.0 DBF 文件转换为 DBASE III(通过代码)?无论如何,我正在研究你的建议。
      【解决方案3】:
              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);
      

      【讨论】:

        猜你喜欢
        • 2011-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        相关资源
        最近更新 更多