Я пытаюсь синхронизировать две таблицы базы данных 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
Хорошо, поэтому я попал туда в конце, используя эту ссылку:
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;
}
}