Я пытаюсь перенести данные из некоторых таблиц из одной базы данных сервера sql в другую базу данных sql-сервера. Я планирую написать службу отдыха wcf, чтобы сделать это. Я также пытаюсь реализовать это с помощью SQLBulkCopy. Я пытаюсь реализовать перечисленные ниже функции при нажатии кнопки. Скопируйте данные Table1 из исходного SQL-сервера в таблицу 1 в сервере-получателе адреса. То же, что и для таблицы 2 и таблицы 3. Я заблокирован по нескольким причинам. Является ли объемная копия sql лучшим вариантом с услугой обслуживания wcf для передачи данных. Меня попросили не использовать ssis в этой задаче. Если есть какие-либо исключения при перемещении данных из источника в пункт назначения, тогда данные назначения должны быть возвращены обратно. Это что-то вроде транзакции. Как реализовать эту транзакционную функцию. Любой указатель поможет.
Основываясь на информации, которую вы дали, ваше решение будет похоже на код образца, который я вставил. Указатели для SQLBulkCopy: BCopyTutorial1 , BCopyTutorial2 SQLBulkCopy с примерами транзакций: TrasactionBulkCopy
Моя версия - это упрощенная версия, основанная на вашем вопросе.
Интерфейс:
[ServiceContract]
public interface IYourBulkCopyService {
[OperationContract]
void PerformBulkCopy();
}
Реализация:
public class YourBulkCopyService : IYourBulkCopyService {
public void PerformBulkCopy() {
string sourceCs = ConfigurationManager.AppSettings["SourceCs"];
string destinationCs = ConfigurationManager.AppSettings["DestinationCs"];
// Open a sourceConnection to the AdventureWorks database.
using (SqlConnection sourceConnection = new SqlConnection(sourceCs) {
sourceConnection.Open();
// Get data from the source table as a SqlDataReader.
SqlCommand commandSourceData = new SqlCommand(
"SELECT * FROM YourSourceTable", sourceConnection);
SqlDataReader reader = commandSourceData.ExecuteReader();
//Set up the bulk copy object inside the transaction.
using (SqlConnection destinationConnection = new SqlConnection(destinationCs)) {
destinationConnection.Open();
using (SqlTransaction transaction = destinationConnection.BeginTransaction()) {
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(
destinationConnection, SqlBulkCopyOptions.KeepIdentity,
transaction)) {
bulkCopy.BatchSize = 10;
bulkCopy.DestinationTableName =
"YourDestinationTable";
// Write from the source to the destination.
try {
bulkCopy.WriteToServer(reader);
transaction.Commit();
} catch (Exception ex) {
// If any error, rollback
Console.WriteLine(ex.Message);
transaction.Rollback();
} finally {
reader.Close();
}
}
}
}
}
}
}