Обновление таблицы Sql из набора данных с использованием C #

1

Я пытаюсь синхронизировать две таблицы базы данных SQL. Например, синхронизация моей локальной базы данных с базой данных Azure. Мой метод до сих пор заключается в том, чтобы получить данные из моей локальной базы данных в DataSet. Удалите все записи из базы данных Azure и вставьте DataSet в Azure.

Мне удалось получить данные локальной базы данных в DataSet и удалить данные Azure. Но я не могу вставить DataSet в свою таблицу Azure. Каков наилучший способ сделать это? В идеале я не хочу вставлять данные, явно указывая столбцы в моем приложении, так как я бы хотел, чтобы это было в будущем, если я добавлю столбцы в будущем.

Пока у меня есть:

    private static bool UploadDataSet(DataSet ds)
    {
        try
        {
            using (SqlDataAdapter updateData = new SqlDataAdapter("",AzureSqlConnection))
            {
                updateData.Update(ds, ds.Tables[0].TableName);
                Log.LogWriter(string.Format("Updating data in table {0}", ds.Tables[0].TableName), "Success");
                return true;
            }
        }
        catch (Exception ex)
        {
            Log.LogWriter(string.Format("Failed to update table {0}. Error {1}", ds.Tables[0].TableName, ex), "Failed");
            throw;
        }
    }

Но это фактически не загружает ни одной строки в мою базу данных Azure. Я предполагаю, что RowState из строк в моем наборе данных не изменился.

Ps. Я знаю, что на Azure уже есть агент синхронизации, но это все еще в предпросмотре и не подходит для производства Enviroment

Теги:
sql-server
azure

1 ответ

2
Лучший ответ

Хорошо, поэтому я попал туда в конце, используя эту ссылку:

объемная вставка-в-SQL

    private static bool UploadDataSet(DataSet ds)
    {
        try
        {
            SqlBulkCopy bulkCopy = new SqlBulkCopy(AzureSqlConnection, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.UseInternalTransaction, null);
            bulkCopy.DestinationTableName = ds.Tables[0].TableName;
            bulkCopy.WriteToServer(ds.Tables[0]);
            Log.LogWriter(string.Format("Updating data in table {0}", ds.Tables[0].TableName), "Success");
            return true;
        }
        catch (Exception ex)
        {
            Log.LogWriter(string.Format("Failed to update table {0}. Error {1}", ds.Tables[0].TableName, ex), "Failed");
            throw;
        }
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню