web-dev-qa-db-ja.com

C#.DBFファイルからデータテーブルに読み込む

C#を使用してVisualStudioの.dbfファイルに接続し、データテーブルにデータを入力する必要があります。何か案は?現在、Visual Fox Pro9.0でテーブルを表示できます

私が試したが失敗したコード、取得し続ける

外部テーブルが予期された形式ではありません。

private OleDbConnection conn;
private OleDbCommand cmd;
private OleDbDataReader dr;
private string sqlStr = "";
private DataSet myDataSet;
private OleDbDataAdapter myAdapter;


void test2()
{
    conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\PC1\Documents\\Visual FoxPro Projects\\;Extended Properties=DBASE IV;");
    conn.Open();
    sqlStr = "Select * from Clients.dbf";
    //Make a DataSet object
    myDataSet = new DataSet();
    //Using the OleDbDataAdapter execute the query
    myAdapter = new OleDbDataAdapter(sqlStr, conn);
    //Build the Update and Delete SQL Statements
    OleDbCommandBuilder myBuilder = new OleDbCommandBuilder(myAdapter);         

    //Fill the DataSet with the Table 'bookstock'
    myAdapter.Fill(myDataSet, "somename");
    // Get  a FileStream object
    FileStream myFs = new FileStream
          ("myXmlData.xml", FileMode.OpenOrCreate, FileAccess.Write);
    // Use the WriteXml method of DataSet object to write XML file from the   DataSet
    //  myDs.WriteXml(myFs);
    myFs.Close();
    conn.Close();
}
6
TheCoder

このコードは私のために働いた!

public DataTable GetYourData()
    {
        DataTable YourResultSet = new DataTable();

        OleDbConnection yourConnectionHandler = new OleDbConnection(
            @"Provider=VFPOLEDB.1;Data Source=C:\Users\PC1\Documents\Visual FoxPro Projects\");

        // if including the full dbc (database container) reference, just tack that on
        //      OleDbConnection yourConnectionHandler = new OleDbConnection(
        //          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\NameOfYour.dbc;" );


        // Open the connection, and if open successfully, you can try to query it
        yourConnectionHandler.Open();

        if (yourConnectionHandler.State == ConnectionState.Open)
        {
            string mySQL = "select * from CLIENTS";  // dbf table name

            OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);
            OleDbDataAdapter DA = new OleDbDataAdapter(MyQuery);

            DA.Fill(YourResultSet);

            yourConnectionHandler.Close();
        }

        return YourResultSet;
    }
11
TheCoder

Visual FoxPro DBFは[〜#〜] not [〜#〜]dBase IV DBFであるため、MicrosoftAccessのJetデータベースのほとんどのバージョンで読み取ることができません。エンジン。 (MSDNにはいくつかの 詳細 があります。気になる場合。)

FoxProから実際のdBase形式にDBFをエクスポートするか、Visual FoxPro OLEDBプロバイダーを使用してC#でDBFを開く必要があります。

プロバイダーをインストールしたら、DBFがそのフォルダーにあると仮定して、接続文字列の「Provider」引数を次のように変更する必要があります。

Provider=VFPOLEDB.1;Data Source=C:\Users\PC1\Documents\Visual FoxPro Projects\;

(@ ""文字列形式を使用します。PC1とドキュメントの間のコードサンプルでスラッシュを見逃しました。)

0
DougM