3

私が抱えている問題の1つは、テーブルに名前があるとは思わないことです...単なる.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 Driver] テーブルまたは制約が見つかりません。"}

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 文字を超えると、ファイルが見つかりません。適切な長さのファイル名を試してみましたが、「データを含むテーブルでは操作はサポートされていません。」

さまざまなインターネット リンクは、新しいテーブルを作成し、すべてのフィールドをコピーする必要があることを示しているようです。

于 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 に答える