2011-02-05 24 views
0

私はMSFT Sql Server、Oracle、Sybaseをバックエンドとして使用する大規模なアプリケーションのユニット/自動テストを行っています。多分、dbとのインタフェースをとるためのより良い方法がありますが、ODBCライブラリは私が使用する必要があります。これらの制約を踏まえて、私が把握しなければならないことがあります。私はあなたの助けが大好きです。私のテストではデータベースの状態が変わってしまいました。私が完了した後は安価で99.99%の堅牢な方法で復元しています。ですから、私はこの関数を補完することを求めます。データセットからテーブルを作成する方法が必要です。C#を使用してデータベーステーブルにODBC 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ライブラリ、VS2010C#、ODBCライブラリ、すべての3つのベンダーのサポート。

答えて

1

この意味は?私はWriteToTable

でReadFromTable

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

で何か

を望むかもしれない

/* 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を再作成する必要があることです。

+0

おそらくありがとうございます。 ODBC APIが私の必要とするものを完全に持つ可能性があります。私は100%のものがどこに来るのか確信していません。それはおそらく物事を永続させる方法でしょうか?下の行を変更する場合、データセットオブジェクトはどうなりますか?おそらく私はただクローンすることができたでしょうか?多分あなたはマージの目的のためにこれを行いました。それは素晴らしいですが、私が必要とするのは、テストまたはテストスイートが終了した後のdbの状態をリセットすることだけです。しかし、私はまた、2つのテーブル(テスト比較ロジック用)の違いを計算できるようにしたいと考えています。うまくいけば、これは理にかなっている。お気軽に質問してください。 –

+0

XMLの内容は確かに持続しています。レコードをdbに戻したいので、クローンは機能しません。クローンを作成すると、データセットの行はすべて変更されていないので、Updateを呼び出すと何も変わりません。変更されたものだけを復元したい場合は、dbから実際のデータセットをロードし、Mergeを呼び出すことができます。あなたが間違った結果に終わった場合は、行ごとに比較することによってより微妙なマージを書いて、欠けているものを追加し、余分なものを削除し、違うものを更新する必要があります。元に戻すことはできませんが、無料ではありません... – rene

+0

ありがとう、ちょっと遊びましょう... –

関連する問題