2013-07-09 31 views
0

在Visual Studio中,我可以使用「發佈到提供者」選項將整個數據庫及其所有數據,模式等...導出到.sql轉儲文件。有沒有辦法用C#或VB.NET生成該文件?以編程方式備份​​到sql文件

+1

它通常是一個壞主意來備份一切文本格式。架構 - 也許,但不是數據。 – Neolisk

+0

您是否希望將數據庫備份爲常規.BAK文件,還是希望將其作爲重新創建數據庫的DDL和DML語句? – Jim

+0

@Jim,我想通過db備份到.sql文件。 – boruchsiper

回答

0

您可以使用sqlcmd執行多種不同的備份操作。例如,讓你可以運行一個批處理文件或命令行下面的一個.bak文件...

sqlcmd -S host\DBName -E -Q "BACKUP DATABASE [Name_of_Database] TO DISK=’X:PathToBackupLocation[Name_of_Database].bak’" 

*編輯

由於OP似乎在尋找DDL和DML來重建DB,而不是.BAK文件,上面的內容不是他需要的,但是我會將它留在這裏以防別人幫助其他人。

爲了達到OP的需要,你可能會想看看SMO庫。

也看到這些帖子SO ...

https://stackoverflow.com/a/1162348/1246574

Programmatically generate script for all objects in a database

+0

這不會備份任何東西。 – Sam

+0

@Sam,你願意詳細說明嗎?我直接從我在生產中使用的腳本中複製這個腳本來創建每日數據庫備份,所以我沒有看到它「不會備份任何內容」。 – Jim

+0

如果您運行THAT SCRIPT,則不會創建備份。你說過會的。 -S是服務器名稱,-E是集成auth,-Q是查詢。 「在此輸入說明」不是查詢。 – Sam

2

您可以使用此代碼嘗試,

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = "Cmd.exe"; 
psi.Arguments = "/C sqlcmd -S servername -E -Q " + 
       "\"BACKUP DATABASE [dbname] TO DISK = " + 
       "N'D:\\TEMP\\test.bak' WITH NOFORMAT, INIT, " + 
       "NAME = N'dbname-Complete Backup', " + 
       "SKIP, NOREWIND, NOUNLOAD, STATS = 10\""; 

Process.Start(psi); 

當然,你需要更換servername與您的服務器的名稱,dbname與您的數據庫的名稱和目標fil e名稱(d:\temp\test.bak)與您的首選輸出名稱。
最後,您將擁有一個包含數據庫完整備份的文件。您只能在相同或更新版本的Sql Server上恢復此文件。

+0

Thnx,但我需要一個.sql文件,而不是.bak – boruchsiper

+0

@Steve,從他看來他不想要.BAK文件的意見,而是希望它全部轉儲到DDL/DML語句,就像如果你想在SSMS中使用「Script As」。 – Jim

+2

@Jim我明白了,但是如果我看看這篇[舊文章](http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated),這個任務將會非常複雜,我不會當然,如果真的值得付出的努力。 – Steve

1

SQL SMO可以作爲您的一個選項,我早就將它用於模式生成,看看this,儘管它最初只表示模式後來泛指包括數據的腳本,以及在那裏說的一個選項: -

If you want to include the data as well in the script then write 
options.ScriptData = true; 
相關問題