我是一个大型应用程序的单元/自动测试,它使用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家供应商。
答案 0 :(得分: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