0

私は、MSFT Sql Server、Oracle、およびバックエンドとしてSybaseを使用する大規模なアプリケーションのユニット/自動テストを行っています。dbとインターフェイスするためのより良い方法があるかもしれませんが、ODBCライブラリが私が使用しなければならないものです。これらの制約を考えると、私が理解する必要があることがあります、そして私はこれについてあなたの助けが欲しいです。私のテストはデータベースの状態を変更します。完了後に物事を復元するための安価で99.99%の堅牢な方法を探しています(各テスト後の完全なデータベース復元はペナルティが大きすぎるように感じます)。したがって、以下でこの関数を補完するものを探します。DataSetからテーブルにデータを入力する方法が必要です。

    private DataSet ReadFromTable(ODBCConnection connection, string tableName)
    {
        string selectQueryString = String.Format("select * from {0};", tableName);
        DataSet dataSet = new DataSet();
        using (OdbcCommand command = new OdbcCommand(selectQueryString, connection))
        using (OdbcDataAdapter odbcAdapter = new OdbcDataAdapter(command))
        {
            odbcAdapter.Fill(dataSet);
        }

        return dataSet;
    }

    // The method that I seek.
    private void WriteToTable(ODBCConnection connection, string tableName, DataSet data)
    {
        ...
    }

物事はもっと複雑になる可能性があること、つまりトリガーがあること、一部のテーブルが他のテーブルに依存していることを理解しています。ただし、テスト対象のアプリケーションの効率を上げるために、制約はほとんど使用していません。私はあなたにこの情報を提供しているので、おそらくあなたは物事をより良く/異なって行う方法についての提案を持っています。それらがうまく機能する限り、私はさまざまなアプローチを受け入れます。

交渉不可能なものは次のとおりです。MsTestライブラリVS2010、、、C#ODBCライブラリ、3つのベンダーすべてのサポート。

4

1 に答える 1

1

これはあなたが意味するものですか?私は何かを見落としているかもしれません

ReadFromTable で

dataset.WriteXmlSchema(memorySchemaStream);
dataset.WriteXml(memoryDataStream);

WriteToTable で

/*  empty the table first */

Dataset template = new DataSet();
template.ReadXmlSchema(memorySchemaStream);
template.ReadXml(memoryDataStream);

Dataset actual = new DataSet();
actual.ReadXmlSchema(memorySchemaStream);

actual.Merge(template, false);

actual.Update();

他のバリアントは次のとおりです。現在のデータを読み取り、テンプレートと比較し、不足しているものに基づいて実際のデータセットにデータを追加します。覚えておくべき唯一のことは、実際の DataRows をあるデータセットから別のデータセットにコピーすることはできないということです。DataRows を再作成する必要があります。

于 2011-02-07T22:26:10.410 に答える