4

私はこれを選択しようとしていますが、問題なく動作します

string str = 
    "SELECT * FROM FREE RIGHT JOIN TestTest ON FREE.DOCNO = TestTest.DOCNO";
DataTable dt = new DataTable();
OdbcDataAdapter da = new OdbcDataAdapter(str, odbconn);
da.Fill(dt);

私はこれを試みて.dbfを作成しようとしていますが、このOdbcExceptionが発生します:

string str0 = "Create Table Persons (Name char(50), City char(50), Phone char(20), Zip decimal(5))";
OdbcCommand cmd = new OdbcCommand(str0, odbconn);
cmd.ExecuteNonQuery();

エラー[42000][Microsoft][ODBCdBaseドライバー]フィールド定義の構文エラー。

4

2 に答える 2

3

Zip decimal(5)ODBC dBaseドライバが気に入らないため、問題の原因はです。頭のてっぺんから、そしてグーグルで簡単に調べた後、私はそれが許容できる構文を思い付くことができませんでした。次のように、代わりにOleDbプロバイダーを使用すると、非常に楽しく受け入れられます。

using (var dBaseConnection = new OleDbConnection(
    @"Provider=Microsoft.Jet.OLEDB.4.0; " +
    @" Data Source=C:\Users\RobertWray\Documents\dBase; " +
    @"Extended Properties=dBase IV"))
{
    dBaseConnection.Open();

    string createTableSyntax = 
        "Create Table Person " +
        "(Name char(50), City char(50), Phone char(20), Zip decimal(5))";
    var cmd = new OleDbCommand(createTableSyntax, dBaseConnection);
    cmd.ExecuteNonQuery();
}

ただし、1つの質問: Zip列を小数として作成してもよろしいです?米国居住者ではないので、この情報に100%自信はありませんが、ウィキペディアによると、郵便番号は。で始めることができ0ます。それらを数値データ型として格納すると、それを正確に表すことができなくなります。

ODBCを介してテーブルを作成するための私のコード:

using (var dBaseConnection = new OdbcConnection(@"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\Users\RobertWray\Documents\dBase;"))
{
    dBaseConnection.Open();

    string str0 = "Create Table Person2 (Name char(50), City char(50), Phone char(20))";
    var cmd = new OdbcCommand(str0, dBaseConnection);
    cmd.ExecuteNonQuery();
}
于 2010-09-04T09:18:37.033 に答える
0

NUMERICの代わりにvfpoledbプロバイダーとフィールドタイプを使用しDECIMALます。

string ConnStr1 = @"Provider =vfpoledb; Data Source = C:\MyDataSource; Collating Sequence =machine;
于 2011-09-14T10:31:53.490 に答える