2011-02-05 44 views
0

我是單位/自動測試一個大型應用程序,它使用MSFT Sql Server,Oracle和Sybase作爲其後端。也許有更好的方法來與db接口,但是ODBC庫是我必須使用的。鑑於這些限制,我需要弄清楚一些事情,並且我會很樂意爲您提供幫助。我的測試確實改變了數據庫的狀態,我尋求一種便宜的,99.99%的可靠方法來完成後的恢復工作(我覺得在每次測試過後都會有一次完整的數據庫恢復)。所以,我在下面尋找這個函數的補充 - 我需要一種方法來從DataSet填充表。如何使用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庫,VS2010,C#,ODBC庫,支持所有3個供應商。

回答

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

+0

也許,謝謝。 ODBC API完全有可能具有我所需要的。我只是不能100%確定xml內容在哪裏。這可能是一種堅持事情的方式嗎?如果我要更改下面的行,數據集對象會發生什麼?也許我可以克隆一個?也許你是爲了合併的目的而這樣做的。這很好,但我需要的是在測試或測試套件完成後重置db的狀態。但是,我還想能夠計算兩個表之間的差異(用於測試比較邏輯)。希望這是有道理的。隨意問的問題。 – 2011-02-08 00:08:51

相關問題