SqlBulkCopy Wcf Rest 在 2 sql 服务器表之间移动数据
SqlBulkCopy Wcf Rest Moving Data between 2 sql server tables
我正在尝试将一些 table 中的数据从一个 sql 服务器数据库移动到另一个 sql 服务器数据库。我打算编写一个 wcf 休息服务来做到这一点。我也在尝试使用 SQLBulkCopy 来实现它。我正在尝试在单击按钮时实现以下功能。将 Table1 数据从源 sql 服务器复制到目标 sql 服务器中的 Table 1。与 table 2 和 table 3 相同。我在几件事上受阻。 sql 批量复制是使用 wcf rest 服务传输数据的最佳选择吗?我被要求不要在此任务中使用 ssis。如果在将数据从源移动到目标时出现任何异常,则应将目标数据还原。这有点像交易。我如何实现这个交易功能。任何指针都会有所帮助。
根据您提供的信息,您的解决方案类似于我插入的示例代码。 SQLBulkCopy 的指针:BCopyTutorial1, BCopyTutorial2 SQLBulkCopy with transaction scope examples: 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();
}
}
}
}
}
}
}
我正在尝试将一些 table 中的数据从一个 sql 服务器数据库移动到另一个 sql 服务器数据库。我打算编写一个 wcf 休息服务来做到这一点。我也在尝试使用 SQLBulkCopy 来实现它。我正在尝试在单击按钮时实现以下功能。将 Table1 数据从源 sql 服务器复制到目标 sql 服务器中的 Table 1。与 table 2 和 table 3 相同。我在几件事上受阻。 sql 批量复制是使用 wcf rest 服务传输数据的最佳选择吗?我被要求不要在此任务中使用 ssis。如果在将数据从源移动到目标时出现任何异常,则应将目标数据还原。这有点像交易。我如何实现这个交易功能。任何指针都会有所帮助。
根据您提供的信息,您的解决方案类似于我插入的示例代码。 SQLBulkCopy 的指针:BCopyTutorial1, BCopyTutorial2 SQLBulkCopy with transaction scope examples: 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();
}
}
}
}
}
}
}