2010-10-17 20 views
8

मैं एक .bak डेटाबेस बैकअप फ़ाइल का उपयोग कैसे कर सकता हूं (SQL Server में क्वेरी के माध्यम से बैक अप) प्रोग्रामेटिक रूप से?बैकअप डेटाबेस प्रोग्रामेटिक रूप से

मैं चाहता हूं कि मेरा एप्लिकेशन किसी स्थान पर मेरा डेटाबेस बैक अप लेगा (जो मैं पहले से कर सकता हूं) और मैं यह भी चाहता हूं कि यह बैक अप डेटाबेस (.bak फ़ाइल) लोड करने में सक्षम हो।

मैं सी # का उपयोग करके यह कैसे कर सकता हूं?

उत्तर

14

आपको पहले यह सुनिश्चित करना होगा कि आपके पास एसएमओ (एसक्यूएल सर्वर प्रबंधन ऑब्जेक्ट्स) स्थापित है और आपके देव बॉक्स पर आपके लिए उपलब्ध है। यह आमतौर पर मामला है, अगर आपने उस पर SQL सर्वर का कुछ संस्करण स्थापित किया है।

आप एसएमओ पुस्तकालय उपलब्ध है, तो आप अपने ऑपरेशन के लिए इस कोड का उपयोग कर सकते हैं:

using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo; 

static void Main(string[] args) 
{ 
    // create instance of SMO Server object 
    Server myServer = new Server("(local)"); 

    // create new instance of "Restore" object  
    Restore res = new Restore(); 
    res.Database = "SMO"; // your database name 

    // define options  
    res.Action = RestoreActionType.Database; 
    res.Devices.AddDevice(@"C:\SMOTest.bak", DeviceType.File); 
    res.PercentCompleteNotification = 10; 
    res.ReplaceDatabase = true; 

    // define a callback method to show progress 
    res.PercentComplete += new PercentCompleteEventHandler(res_PercentComplete); 

    // execute the restore  
    res.SqlRestore(myServer); 
} 

// method to show restore progress 
static void res_PercentComplete(object sender, PercentCompleteEventArgs e) 
{ 
    // do something...... 
} 

इसके लिए काम करने के लिए, आप निम्न परियोजना का संदर्भ

alt text

की आवश्यकता है

और नामस्थान Microsoft.SqlServer.SmoExtended को Microsoft.SqlServer.SmoExtended.dll नामक असेंबली में कार्यान्वित किया गया है, यदि आपके पास एसएमओ स्थापित है तो C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\ निर्देशिका में पाया जाना चाहिए।

आप एसएमओ स्थापित नहीं हैं, तो आप एसक्यूएल सर्वर 2008 या here एसक्यूएल सर्वर 2008 R2 के लिए के लिए here से लाने (वहाँ भी SQL सर्वर 2005 के लिए एक पुराने संस्करण)

+1

एसएमओ वास्तव में इस तरह के एक सरल कार्य के लिए आवश्यक नहीं होना चाहिए। – driis

+3

@driis: जब से .bak फ़ाइल प्रोग्रामेटिक रूप से एक साधारण कार्य का उपयोग कर रहा था? –

+1

@driis: हाँ, अगर यह केवल यह कार्य है - तो एसएमओ अधिक हो सकता है। लेकिन ओपी इसे और अधिक करने के लिए बढ़ा सकता है। कभी-कभी यह भी एक विकल्प है - क्या मैं टी-एसक्यूएल कथन का उपयोग करना चाहता हूं और उनको निष्पादित करना चाहता हूं, या क्या मैं कुछ हासिल करने के लिए कार्य-विशिष्ट लाइब्रेरी का उपयोग करना चाहता हूं। –

5

आप एसक्यूएल जैसे, कार्रवाई करने की जरूरत पर अमल करने SqlCommand.ExecuteNonQuery का उपयोग करें:

BACKUP DATABASE [dbname] ...... 

RESTORE DATABASE [dbname] ...... 

बेशक प्रश्न में एसक्यूएल उपयोगकर्ता उचित अनुमतियाँ की आवश्यकता होगी।

1

यह कैसे करना है जा सकते हैं बैकअप:

-- ========================================================= 
-- Author:  Stefan 
-- Create date: 16.07.2010 
-- Last mutation: 16.07.2010 
-- Description: Backup der ausgewählten Datenbank 
-- ========================================================= 
CREATE PROCEDURE [dbo].[sp_BackupDatabase] 
    @in_strDataBase varchar(50) 
    --,@in_strUser varchar(36) 

AS 
BEGIN 

DECLARE @strBasePath nvarchar(3000) 
DECLARE @strFileName nvarchar(1000) 

DECLARE @strFileNameAndPath nvarchar(4000) 

SET @strBasePath = 'E:\Temp\' 

SET @strFileName = @in_strDataBase 
SET @strFileName = @strFileName + '_' 
SET @strFileName = @strFileName + convert(varchar, getdate(), 112) 
SET @strFileName = @strFileName + '_' + REPLACE(convert(varchar, getdate(), 108),':','_'); 
SET @strFileName = @strFileName + '_sts' 
SET @strFileName = @strFileName + '.bak' 

SET @strFileNameAndPath = @strBasePath + @strFileName 

PRINT @strFileNameAndPath 

BACKUP DATABASE @in_strDataBase TO [email protected] 

END 

GO 

और यह कैसे बहाल करने के लिए है: इस लिंक

RESTORE DATABASE MyDatabase 
FROM DISK='C:\temp\MyDatabase_20100810.bak' 
WITH REPLACE, 
MOVE 'MyDatabase' TO 'E:\SQLData_2008\MyDatabase.mdf', 
MOVE 'MyDatabase_log' TO 'E:\SQLData_2008\MyDatabase.ldf' 
संबंधित मुद्दे