我遇到的一个问题是,我不认为该表有一个名称......它只是一个.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驱动程序]无法找到表或约束。“}
答案 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