2013-03-18 56 views
0

是否可以使用C#(不使用SMO或更改权限)以编程方式从SQL Server数据库创建备份文件? SQL Server没有权限在用户文件夹中创建(写入)*.bak文件,但程序可以执行此操作。所以我想创建一些查询到数据库,将给数据库的转储,我可以写入文件。SQL Server备份到C#文件

类似的东西:

SqlCommand sc = new SqlCommand(@"backup database test1 to stream", cnnct); 
SqlDataReader r = sc.ExecuteReader(); 
while(r.read())file.WriteLine(reader.GetString(0)); 
+0

http://sqldumper.ruizata.com/ – 2013-03-18 10:54:45

+1

正确的方式*是*与SMO,并且需要适当的权限(您可能没有)。你为什么拒绝这样做? – alroc 2013-03-18 11:19:58

+0

因为SMO需要(据我所知)SQL服务器的特定版本(有2005,08,12等dll的)。 – 2013-03-18 11:23:02

回答

3

这既不可能,也不是一个好主意。 MSSQL数据库太复杂,无法像SQL那样可靠地转储。我知道没有任何工具能够一直得到这个权利。

正确的方法来处理这是为了给SQL Server用户访问该文件夹的权利。找出正在使用的用户(可能是procexp.exe?)并添加必要的权限。

+0

感谢您的回复,但主要想法是通过在不更改基本权限的情况下向DB(使用代码等)查询来进行转储。 – 2013-03-18 11:21:08

+0

好的。所以我建议你使用SMO脚本架构和数据。它可以做到这一点。 SMO独立于SQL Server版本。只需使用可用的最新SMO。 – usr 2013-03-18 11:52:03

+0

独立?那么我可以使用2008服务器的2005和2012服务器的smo库吗? – 2013-03-18 11:53:50

0

YE它是,但是方式比你想象的更复杂。您需要实现一个VDI specification组件(根据定义,它是本机代码,不受管理)。然后,您可以将此VDI加载到SQL Server并备份到其中。请参阅SHEDDING LIGHT on VSS & VDI Backups in SQL Server。在SQL Server Compressed Backup已完成。

当然这是你想要的,实现VDI的人不需要问这样的问题。那么真的是试图做什么?看来你想要的更多的是脚本编号为的数据库,其中有SMO Scripter