如何在 C# 中从头开始创建 DBF 文件?

问题描述 投票:0回答:4

我正在尝试在我的程序中从头开始编写 DBF 文件。我想创建它,添加一些列,然后将数据添加到列 X 次。我的程序不需要再次读入它,但其他程序会。

我已经四处寻找解决方案,但似乎都假设有一个现有的 DBF 文件,而我想创建一个新的。

这样做的目的是使 DBF 成为 ESRI ShapeFile 的一部分。

有人知道该怎么做吗?

c# .net .net-2.0 dbf
4个回答
12
投票

下载 Microsoft OLE DB Provider for Visual FoxPro 9.0 并使用:

string connectionString = @"Provider=VFPOLEDB.1;Data Source=D:\temp";
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = connection.CreateCommand())
{
    connection.Open();

    OleDbParameter script = new OleDbParameter("script", @"CREATE TABLE Test (Id I, Changed D, Name C(100))");

    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "ExecScript";
    command.Parameters.Add(script);
    command.ExecuteNonQuery();
}

编辑:OP不需要FoxPro DBF格式,而是dBase IV格式:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp;Extended Properties=dBase IV";

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

    command.CommandText = "CREATE TABLE Test (Id Integer, Changed Double, Name Text)";
    command.ExecuteNonQuery();
}

2
投票

我对 ESRI ShapeFile 一无所知...但您可以使用 OleDb 创建 dbf。

以下是使用 VFP OleDb 提供程序的示例:

    string dbfDirectory = @"c:\";
    string connectionString = "Provider=VFPOLEDB;Data Source=" + dbfDirectory;
    using (OleDbConnection connection = new OleDbConnection(connectionString)) {
        connection.Open();
        OleDbCommand command = connection.CreateCommand();

        command.CommandText = "create table Customer(CustId int, CustName v(250))";
        command.ExecuteNonQuery();
        connection.Close();
    }

2
投票

如果你想完全消除外部依赖,你将不得不手动创建文件。为了做到这一点,您需要花一些时间阅读描述文件格式规范的白皮书,以了解您需要实现的字段以及它们应包含的内容。您可以在此处在线找到:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

当然,这并不适合胆小的人。在开始旅程之前,请确保您了解这里需要做的工作。


0
投票

任何在 2024 年发现此问题并因“在本地计算机上找不到提供程序”而对接受的答案有问题的人只需通过将 Microsoft.Jet.OLEDB.4.0 更改为 Microsoft.ACE.OLEDB.12.0 来更新连接字符串。就像魅力一样。

显然这与 32 位与 64 位有关。

© www.soinside.com 2019 - 2024. All rights reserved.