【问题标题】:How to add column to .DBF file?如何将列添加到 .DBF 文件?
【发布时间】:2013-07-03 21:17:15
【问题描述】:

我遇到的一个问题是,我认为该表没有名称......它只是一个 .dbf 文件

所以我一直在尝试这个:

public void SQLAlter(string dbffile, string ColumnName )
{
   //dbffile is "C:\MAPS\WASHINGTON\TLG_ROADS_L.DBF"
   //ColumnName is "State"
   if (File.Exists(dbffile))
   {
        System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();
        conn.ConnectionString = @"DSN=dBase Files";
        conn.Open();
        System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand();
        comm.CommandText = "ALTER TABLE " + dbffile + " ADD COLUMN " + ColumnName + " VARCHAR(1024)";
        comm.ExecuteNonQuery();
    }
 }

错误是:

基础 {System.Data.Common.DbException} = {“错误 [42S02] [Microsoft][ODBC dBASE 驱动程序] 找不到表或约束。"}

【问题讨论】:

  • dbffile的值是多少,是否存在?
  • @Rob A 我更新了我的问题,简短回答是。
  • @marc_s - ODBC 根据连接字符串中 DSN 的值将命令转换为函数调用或供应商特定的 SQL。
  • @marc_s,您实际上可以在 DBF 文件上使用 SQL,有一个名为 Visual Fox Pro 的“小”Microsoft 程序,它可以做的远远超过它本来应该做的。如果有人建议您使用它,请尖叫并跑一英里!另外,Python 等可以与几乎与 SQL DB 相同的 DBF 进行交互,所以我不明白为什么 C# 不能——我不知道如何。

标签: c# sql dbase


【解决方案1】:

我相信表名应该是文件名,连接字符串应该指向包含dbf文件的文件夹。

var path = Path.GetDirectoryName(dbffile);
var tableName = Path.GetFileName(dbffile);
// ...
conn.ConnectionSTring = @"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" + path;
comm.CommandText = "ALTER TABLE " + tableName + //...

查看 connectionstrings.com:http://connectionstrings.com/dbf-foxpro

【讨论】:

  • 连接正确...连接字符串应指向文件所在的 PATH,而不是特定的 DBF 文件。此外,对于@iterationx,如果连接没有“独占”使用,它将失败。
【解决方案2】:

这其实是正确的语法

comm.CommandText = "ALTER TABLE " + dbffile + " ADD COLUMN " + ColumnName + " VARCHAR(1024)";

但是,如果您的文件名超过 8 个字符,它将找不到它。即使我尝试了一个适当长度的文件名,“包含数据的表不支持操作。”

各种 Internet 链接似乎表明必须创建一个新表,并复制所有字段。

【讨论】:

    【解决方案3】:

    尝试其他提供商。

    Visual Foxpro Provider 对我有用 conn.ConnectionString = @"Provider=VFPOLEDB.1; 数据源=Themes.dbf" + @"\;扩展属性=dBase IV";

    如果您的机器上没有安装驱动程序,您可以在此处获取: http://www.microsoft.com/en-us/download/details.aspx?id=14839

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多