3

我遇到的问题之一是,我认为该表没有名称......它只是一个 .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} = {“错误 [42S02] [Microsoft][ODBC dBASE 驱动程序] 找不到表或约束。”}

4

3 回答 3

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

于 2011-12-29T17:04:11.453 回答
1

这实际上是正确的语法

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

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

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

于 2011-12-29T18:35:55.830 回答
0

尝试其他提供商。

它适用于 Visual Foxpro Provider conn.ConnectionString = @"Provider=VFPOLEDB.1; Data Source=Themes.dbf" + @"\;Extended Properties=dBase IV";

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

于 2013-07-03T13:17:15.787 回答