1

C# でデータベース (Ms Access) を読んでいます。接続には Ado.net を使用しています。このデータベースには多くのテーブル (約 100) があり、各テーブルには約 50 列と 500 行があります。すべてのフィールドには、異なるデータ型 (integer、string、bool) が含まれています。私がしなければならないことは、選択したテーブルとフィールドをバイナリ形式に変換することです。

いくつかの文献調査の後、バイナリ変換のためだけに変数を読み取る必要があるため、「DataReader」を使用してデータを読み取ることを計画しました。

私の質問は

C#プログラミング側では、私のデータ構造はどうあるべきですか? すべてのテーブルに個別のクラスを作成し、メンバー変数とメソッドを定義した場合、どうすればより効果的にできるでしょうか?. 100 個のテーブルと 50 個のフィールドがあると述べたので、実際にはすべてのフィールドを選択する必要はありません (必要なフィールドのみを選択する必要があります)。私はそれをハードコーディングしたくありません(たとえば)

SELECT BusinessEntityID, LoginID, NationalIDNumber from table1Name

コードのどこかに記載されている、選択したテーブルと選択したフィールドを反復処理する必要があるためです。私はSQLに少し慣れていないので、ヒントを教えてください。別の方法で、テーブルとフィールドの変数を使用して選択クエリを効率的にする方法を質問した場合 (この質問に問題がある場合は修正してください)

アップデート

以下で言及されているようなもの SQL Server SELECT INTO @variable?

4

1 に答える 1

2

SchemaTableあなたが説明したように(100 x 50 = 5000)、フィールドの全体的な量が非常に多いため、次を使用して最初に読み取ると役立つ場合がありますOleDb

リスト 1. SchemaTable を取得する (オプション)

static DataTable GetSchemaTable(string connectionString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        DataTable schemaTable = 
           connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
           new object[] { null, null, null, "TABLE" });
        return schemaTable;
    }
}

リスト 2. MS Access データベース テーブルからデータを読み取る

MS Access データベース テーブルからデータを読み取り、オブジェクトを使用して入力DataTableする実際の手順を以下に示します (構文に反映されているように、最初はカスタム DB 操作クラスにカプセル化されているため、必要に応じて変更できます)。DataSetDataAdapter OleDb

#region DataSet, DataAdapter, DataTable
internal DataSet dataSet;
internal OleDbDataAdapter dataAdapter;
internal DataTable dataTable;
private OleDbConnection connection;
#endregion

internal GetData(string SelectQuery, string ConnectionString)
{
    try
    {
        #region Create Data Objects: Connection, DataAdapter, DataSet, DataTable
        // use OleDb Connection to MS Access DB
        connection = new OleDbConnection(ConnectionString);
        connection.Open();

        // create new DataAdapter on OleDb Connection and Select Query text
        dataAdapter = new OleDbDataAdapter();
        dataAdapter.SelectCommand = new OleDbCommand(SelectQuery, connection);

        // create DataSet
        dataSet = new DataSet();

        // retrieve TableSchema
        // DataTable[] _dataTablesSchema = _dataAdapter.FillSchema(_dataSet, SchemaType.Source, "{TABLE NAME}");
        DataTable[] _dataTablesSchema = dataAdapter.FillSchema(dataSet, SchemaType.Source);

        // there is only one Table in DataSet, so use 0-index
        dataTable = _dataTablesSchema[0];

        // use DataAdapter to Fill Dataset
        dataAdapter.Fill(dataTable);

        // OPTIONAL: use OleDbCommandBuilder to build a complete set of CRUD commands
        OleDbCommandBuilder builder = new OleDbCommandBuilder(dataAdapter);
        // Update, Insert and Delete Commands
        dataAdapter.UpdateCommand = builder.GetUpdateCommand();
        dataAdapter.InsertCommand = builder.GetInsertCommand();
        dataAdapter.DeleteCommand = builder.GetDeleteCommand();
        #endregion

        connection.Close();
    }
    catch {throw; }
}

詳細については、MSDN の投稿を参照してください: リンクhttp://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx

: 最初のステップ (リスト 1) はオプションです。OleDbどちらの手順も、MS Access DB で操作するオブジェクトに基づいています。他の DB タイプ (MS SQL サーバーなど) の場合は、さまざまなオブジェクトのセット (SQLConnectionなど)があります。

于 2013-05-09T01:02:14.147 に答える