我正在處理一個需要將舊數據從生產服務器傳輸到存檔服務器的項目。在這裏,如果在傳輸過程中出現任何故障,我在處理服務器間數據一致性時遇到問題。這只是實現交易。在C#.net中處理跨SQL Server的事務的最佳方式是什麼?
每當數據傳輸過程中出現系統故障時,進程應從歸檔服務器中刪除所有傳輸的記錄,並在系統回來時啓動整個傳輸過程。
注意:由於某些權限/設置原因,我無法使用分佈式事務來實現客戶端場所。
有什麼辦法可以在C#.net或SQL Server 2008中處理?
我正在處理一個需要將舊數據從生產服務器傳輸到存檔服務器的項目。在這裏,如果在傳輸過程中出現任何故障,我在處理服務器間數據一致性時遇到問題。這只是實現交易。在C#.net中處理跨SQL Server的事務的最佳方式是什麼?
每當數據傳輸過程中出現系統故障時,進程應從歸檔服務器中刪除所有傳輸的記錄,並在系統回來時啓動整個傳輸過程。
注意:由於某些權限/設置原因,我無法使用分佈式事務來實現客戶端場所。
有什麼辦法可以在C#.net或SQL Server 2008中處理?
當整個事務的任何部分失敗時,以下代碼用於'回滾'到編輯數據庫之前。您可以嘗試對其進行修改以滿足您的需求。
(第一參考System.Transactions的命名空間)
System.Transactions
using(TransactionScope transaction = new TransactionScope())
{
try
{
//modify your database here
transaction.Complete();
}
catch(Exception)
{
transaction.Dispose();
}
}
會在服務器上處理嗎? – AnandPhadke 2012-08-08 06:58:29
我真的不知道。我想我會把它留給你找出來。請讓我知道如果工作與否。 – user1582511 2012-08-08 19:56:40
DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
SAVE TRANSACTION savepointrb1;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
-- your code will be here. if you are using multiple stored procedures then
apply this code on that
IF @TranCounter = 0
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @TranCounter = 0
ROLLBACK TRANSACTION;
ELSE
IF Xact_state() <> -1
ROLLBACK TRANSACTION savepointrb1;
END CATCH
你能解釋一下爲什麼你需要做到這一點使用C#?使用SQL Server功能;這是更快,更少的工作。 – 2012-08-08 06:37:21
SQL服務器對我來說也很好。但是如何在服務器之間使用sql server來實現這個呢? – AnandPhadke 2012-08-08 06:38:04
使用http://en.wikipedia.org/wiki/SQL_Server_Integration_Services – 2012-08-08 06:38:56