如何将列添加到.DBF文件?

时间:2011-12-29 16:12:16

标签: c# sql dbase

我遇到的一个问题是,我不认为该表有一个名称......它只是一个.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();
    }
 }

错误是:

  

base {System.Data.Common.DbException} = {“ERROR [42S02]   [Microsoft] [ODBC dBASE驱动程序]无法找到表或约束。“}

3 个答案:

答案 0 :(得分:2)

我认为表名应该是文件名,连接字符串应该指向包含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

答案 1 :(得分:1)

这实际上是正确的语法

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

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

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

答案 2 :(得分:0)

尝试其他提供商。

它适用于Visual Foxpro提供程序 conn.ConnectionString = @“Provider = VFPOLEDB.1; Data Source = Themes.dbf”+ @“\; Extended Properties = dBase IV”;

如果您的计算机上未安装驱动程序,请在此处获取: http://www.microsoft.com/en-us/download/details.aspx?id=14839