Как записать объект ODBC DataSet в таблицу базы данных с помощью C#?

Я занимаюсь модульным / автоматическим тестированием большого приложения, которое использует MSFT Sql Server, Oracle, а также Sybase в качестве внутреннего сервера. Возможно, есть лучшие способы взаимодействия с БД, но мне нужно использовать библиотеку ODBC. Учитывая эти ограничения, есть кое-что, что мне нужно выяснить, и я буду рад вашей помощи в этом. Мои тесты действительно меняют состояние базы данных, и я ищу недорогой, 99,99% надежный способ восстановить вещи после того, как я закончу (я чувствую, что полное восстановление БД после каждого теста - слишком много штрафа). Итак, я ищу дополнение к этой функции ниже - мне нужен способ заполнить таблицу из набора данных.

    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

Другие вопросы по тегам