DBF2DataSet
一篇关于将 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 对象的 Load
和 Merge
方法似乎没有考虑当前表的结构。
历史
- 2007-08-23 首次发布