2011-12-29 9 views
3

私が持っている問題の一つは、私は、テーブルに名前があるとは思わない、ということです...そのわずかの.dbfファイル列を.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} = { "ERROR [42S02] [マイクロソフト] [ODBCのdBASEドライバー]テーブルまたは制約が見つかりません。"}

+0

何dbffileの値であり、それは存在しませんか? –

+0

@Rob A私は自分の質問を更新しました。 – 0x4f3759df

+0

@marc_s - ODBCは、接続文字列の 'DSN'の値に応じて、コマンドを関数呼び出しまたはベンダ固有のSQLに変換します。 –

答えて

1

これは実際にあなたのファイル名が8文字を超える場合

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

は、しかし、それはそれを見つけることができません正しい構文です。適切な長さのファイル名を試しましたが、「操作はデータを含むテーブルではサポートされていません」

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

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

+0

接続を修正してください...接続文字列は、特定のDBFファイルではなく、ファイルが存在するPATHを指している必要があります。さらに、@ iterationxの場合、接続に「EXCLUSIVE」がないと失敗します。 – DRapp

0

別のプロバイダをお試しください。

Visual FoxProプロバイダで私のために働いた conn.ConnectionString = @ "プロバイダー= VFPOLEDB.1;データソース= Themes.dbf" + @ "\;拡張プロパティ= dBase IV";

ドライバーがマシンにインストールされていない場合、あなたはここでそれを得る: http://www.microsoft.com/en-us/download/details.aspx?id=14839

関連する問題