65.9K
CodeProject 正在变化。 阅读更多。
Home

DBF2DataSet

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.46/5 (11投票s)

2007年8月24日

CPOL

1分钟阅读

viewsIcon

61007

downloadIcon

1121

一篇关于将 DBF 文件转换为数据集 XML 文件的文章。

引言

大家好。这是我在 Code Project 上的第一次贡献,希望你们喜欢。这是一个简单的项目,用于将 FoxPro DBF 文件转换为 XML 文件,然后你可以通过 Dataset.ReadXml() 加载它。我这样做是因为我有很多 DBF 文件,我想以比 VFP 更容易的方式合并和读取它们。

背景

在这个项目中,我使用了以下概念

  • DbProviderFactory
  • BackgroundWorker

Using the Code

该项目包含一个表单,表单级别有一个本地 DataSet。表单读取配置文件中的默认目录,然后在 ListBox 中加载该目录中的 DBF 文件。这是填充 ListBox 包含 DBF 文件的代码:

private void RefrescarDirectorio(string directorio) 
{
    DirectoryInfo d = new DirectoryInfo(directorio);
    FileInfo[] tablas = d.GetFiles("*.dbf");
    // Cargar dbf's de la ruta


    lstTablas.DataSource = tablas;
    lstTablas.DisplayMember = "Name";
}

然后用户可以选择他们想要导出的 DBF 文件,为数据表提供一个名称,然后单击“导出”。此过程可以针对任何 DBF 文件重复进行。

请注意,如果 DataSet 中存在数据表,程序将尝试通过 Datatable.Load(DataReader) 使用 DBF 中的数据加载数据表。如果数据表的结构与要合并的 DBF 的结构不同,则不会抛出异常;这种行为将不受控制。

这是用选定的 DBF 填充数据集的代码。它从 BackgroundWorker 内部调用。

DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.OleDb");
DbConnection cn = f.CreateConnection();
cn.ConnectionString = 
    "Provider=vfpoledb.1;Data Source=" + txtRutaDbf.Text + 
    ";Collating Sequence=general;";
cn.Open();
foreach (FileInfo fInfo in lstTablas.SelectedItems) 
{
    string archivo = fInfo.Name;
    string comando = "SELECT * FROM " + archivo;
    DbCommand cm = cn.CreateCommand();
    cm.CommandText = comando;
    try 
    {
        dt.Load(cm.ExecuteReader());
    } 
    catch (Exception) 
    {
        //throw;

    }
}

关注点

有趣的是,DataTable 对象的 LoadMerge 方法似乎没有考虑当前表的结构。

历史

  • 2007-08-23 首次发布
© . All rights reserved.