0

我正在对一个使用 MSFT Sql Server、Oracle 和 Sybase 作为后端的大型应用程序进行单元/自动测试。也许有更好的方法来与数据库交互,但我必须使用 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)
    {
        ...
    }

我意识到事情可能更复杂 - 有触发器,一些表依赖于其他表。但是,为了提高被测应用程序的效率,我们几乎不使用任何约束。我给你这个信息,所以也许你有一个关于如何更好/不同地做事的建议。我对不同的方法持开放态度,只要它们运作良好。

不可协商的是:MsTestVS2010、、、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 回答