如何使用C#将ODBC DataSet对象写入数据库表?

时间:2011-02-05 18:08:17

标签: database unit-testing c#-4.0 odbc restore-points

我是一个大型应用程序的单元/自动测试,它使用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库,VS2010C#,ODBC库,支持所有3家供应商。

1 个答案:

答案 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