1

Visual Fox Pro データベースへのデータ接続を作成できます。そこから 2 つのテーブルが必要です。2 つのテーブルを結合して C# でデータを取得するにはどうすればよいですか?

4

2 に答える 2

5

まず、Microsoft の Visual FoxPro OleDb provider をダウンロードします

ダウンロードしてインストールすると、データベース テーブルが配置されている PATH への接続に使用できます。さらに、アプリがテーブルが適切にリンクされている「データベース」を使用している場合は、データベース名も明示的に含めることができます。

using System.Data;
using System.Data.OleDb;

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

      OleDbConnection yourConnectionHandler = new OleDbConnection(
          "Provider=VFPOLEDB.1;Data Source=C:\\SomePath\\;" );

      // 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 )
      {
         OleDbDataAdapter DA = new OleDbDataAdapter();
         string mySQL = "select A1.*, B1.* "
                     + " from FirstTable A1 "
                     + "      join SecondTable B1 "
                     + "         on A1.SomeKey = B1.SomeKey "
                     + " where A1.WhateverCondition ";  // blah blah...

         OleDbCommand MyQuery = new OleDbCommand( mySQL, yourConnectionHandle );

         DA.SelectCommand = MyQuery;

         DA.Fill( YourResultSet );

         yourConnectionHandle.Close();
      }

      return YourResultSet;
   }
}
于 2012-05-22T17:56:38.183 に答える
0

誰かがある程度完全なテストを探している場合。Microsoft から VFPOLEDB ドライバーをダウンロードする必要があります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                OleDbConnection connection = new OleDbConnection(
        "Provider=VFPOLEDB.1;Data Source=F:\\Gutters\\Data\\database.dbc;"
    );
                connection.Open();
                DataTable tables = connection.GetSchema(
                    System.Data.OleDb.OleDbMetaDataCollectionNames.Tables
                );

                foreach (System.Data.DataRow rowTables in tables.Rows)
                {
                    Console.Out.WriteLine(rowTables["table_name"].ToString());
                    DataTable columns = connection.GetSchema(
                        System.Data.OleDb.OleDbMetaDataCollectionNames.Columns,
                        new String[] { null, null, rowTables["table_name"].ToString(), null }
                    );
                    foreach (System.Data.DataRow rowColumns in columns.Rows)
                    {
                        Console.Out.WriteLine(
                            rowTables["table_name"].ToString() + "." +
                            rowColumns["column_name"].ToString() + " = " +
                            rowColumns["data_type"].ToString()
                        );
                    }
                }

                string sql = "select * from customer";
                OleDbCommand cmd = new OleDbCommand(sql, connection);

                DataTable YourResultSet = new DataTable();
                OleDbDataAdapter DA = new OleDbDataAdapter(cmd);

                DA.Fill(YourResultSet);
            }
        }
    }
于 2014-03-13T02:49:29.980 に答える