【问题标题】:How do I create a new VFP (OLEDB) table from an existing one using .NET?如何使用 .NET 从现有表创建新的 VFP (OLEDB) 表?
【发布时间】:2009-11-06 09:49:10
【问题描述】:

我们有一个创建许多 Visual Foxpro (DBF) 表的应用程序。这些表中的每一个都有不同的架构,但它们都包含一个已知的日期字段。

我被要求创建另一个应用程序(在 C# 中),它将上周的数据从每个表复制到一个新表(在与源表不同的文件夹中)。将保留不同的表(例如,如果有三个源表,则将有三个目标表)。

随着时间的推移,表格可能会发生变化(例如添加新字段),因此我无法对表格结构做出假设(除了上述日期字段的存在)。

从一个表中获取数据并创建具有相同结构的新表的最简单/最佳方法是什么?

我知道如何查询表以提取数据(例如,用上周的记录填充 DataSet)。但是,我认为必须有更好的方法来创建新表并用结果填充它,而不是手动解析架构中的所有字段信息并使用它来重新创建目标表。

使用 FoxPro 似乎与使用 SQL Server 有很大的不同,每次都让我头疼,所以我需要一些关于我的方法的指导。

生产机器上安装了 VFP 9 OLEDB 驱动程序。如果可能,我们宁愿不必安装太多其他东西。

【问题讨论】:

    标签: c# oledb foxpro visual-foxpro


    【解决方案1】:

    要获得数据、表和记录的精确副本,您可以通过单个 SQL-Select via 来完成

    OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\SomePath");
    OleDbCommand oCmd = new OleDbCommand();
    oCmd.Connection = oConn;
    oCmd.Connection.Open();
    oCmd.CommandText = "select * from SomeTable where someCondition into table YourNewTable";
    oCmd.ExecuteNonQuery();         
    oConn.Close();
    

    您的 where 子句几乎可以是任何东西,Into TABLE 子句告诉 VFP 引擎将结果集创建为新表,因此无需显式声明类型、列等,从一个查询数据并推送到另一个...

    考虑的一个问题...验证用户访问权限显然能够在您尝试创建新表的任何位置创建、读取、写入。如果需要,您甚至可以指定完全限定的路径,例如 C:\SomeOtherPath\Monthly\MyTable1...

    【讨论】:

      【解决方案2】:

      尝试这样的事情(用 VB.NET 编写并转换使用 www.developerfusion.co.uk/tools 的注释):

      using System.Data.OleDb; 
      using System.IO; 
      
      static class Module1 
      { 
          public static void Main() 
          { 
              OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\"); 
              OleDbCommand oCmd = new OleDbCommand(); 
      
              { 
                  oCmd.Connection = oConn; 
                  oCmd.Connection.Open(); 
                  // Create a sample FoxPro table 
                  oCmd.CommandText = "CREATE TABLE Table1 (FldOne c(10))"; 
                  oCmd.CommandType = CommandType.Text; 
                  oCmd.ExecuteNonQuery(); 
              } 
      
              oConn.Close(); 
              oConn.Dispose(); 
              oCmd.Dispose(); 
          } 
      } 
      

      【讨论】:

        【解决方案3】:

        你可以简单地做一个:

        select * from myTable into table newTable [database dbName]
        

        正如 DRapp 所示。但是,您可能还想获取索引(如果有的话)(顺便说一句,不直接支持通过 VFPOLEDB 创建索引,但您可以使用 ExecScript() 函数这样做)。然后最简单的方法是复制表的 DBF、CDX(和 FPT)文件。 VFP 是基于文件的。

        【讨论】:

          猜你喜欢
          • 2021-10-03
          • 2022-07-13
          • 2022-01-11
          • 2019-09-02
          • 2020-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多