上一主题下一主题
关键字
主题 : c#实现数据库的备份还原
级别: 北风技术菜鸟


UID: 472906
精华: 0
发帖: 1257
威望: 4436 点
学点: 3032 点
贡献: 167 点
好评: 0 点
学币: 20 个
注册时间: 2014-07-10
最后登录: 2015-04-06
楼主  发表于: 2015-01-29 01:18||

c#实现数据库的备份还原

在****一个任务,用c#实现数据库的备份还原,如果数据库在本机,已实现OK,但是如果工具不在本机,需要远程连接,就涉及到一个打****远程**器路径的问题。在Sqlserver里面,备份时选择的路径会是数据库所在机器的路径,我问的问题时,在C#里面,怎样实现类似于 sqlserver里面可以打****数据库所在机器的文件夹?
此帖悬赏中(剩余时间:已结束)...
最佳答案: 2 学点
热心助人剩余点数: 1 学点
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
沙发(1楼)  发表于: 2015-01-29 01:20||

sqlserver可以通过类似于下面的sql语句得到某个目录下的文件或文件夹名称。可以通过SQL Server Profiler监控在SSMS界面操作备份选择目录的时候得到 H. @$#D  
declare @Path nvarchar(255) o8 JOpD  
declare @Name nvarchar(255) $`E?=L`$  
 D}98ZKi  
yx :^*/  
select @Path = N'C:' 25$_tZP AI  
Fo.Y 6/}  
AafS6]y  
olE(#}7V  
        create table #filetmpfin (Name nvarchar(255) NOT NULL, IsFile bit NULL) 4,I,f>V  
        if(@Name is null) /Sw~<B!8N  
        begin SIJ7Y{\.  
            create table #filetmp (Name nvarchar(255) NOT NULL, depth int NOT NULL, IsFile bit NULL ) mgAjD.  
            insert #filetmp EXECUTE master.dbo.xp_dirtree @Path, 1, 1 #'_# t/u  
            insert #filetmpfin select Name, IsFile from #filetmp f }=[p>3Dd  
            drop table #filetmp *#T: _  
        end -tj#BEC[H(  
        if(NOT @Name is null) MJXnAIG?2  
        begin !kovrvM6F  
            declare @FullName nvarchar(300) $ZM'dIk?  
            if(@Path is null) FEjO}lTK  
                select @FullName = @Name 5whW>T  
            else T+Z[&|  
                select @FullName = @Path     + '\' + @Name * ,a F-  
            create table #filetmp2 ( Exist bit NOT NULL, IsDir bit NOT NULL, DirExist bit NULL ) )p\`H;7*V4  
            insert #filetmp2 EXECUTE master.dbo.xp_fileexist @FullName | E a%nghl  
            insert #filetmpfin select @Name, 1-IsDir from #filetmp2 where Exist = 1 or IsDir = 1 drop table #filetmp2 "iSY;y o  
        end tbS hSbj  
         J&A1]T4d  
KU|W85ye  
A6z ,6v6  
SELECT jIs>>  
Name AS [Name], xX<f4H\'  
IsFile AS [IsFile] W.j^ L;  
FROM vbid>$%  
#filetmpfin HMd?`  
ORDER BY KQf WpHwfj  
[IsFile] ASC,[Name] ASC NXOXN]=c<  
drop table #filetmpfin
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
板凳(2楼)  发表于: 2015-01-29 01:21||

****一个**器端,****一个客户端。两者之间用SOCKET之类通信(SQL Management与SQL SERVER的关系)。 lo:~~l  
你在管理端看到的不过是**端看到,然后传过来告诉管理端而已,原理就这么简单。  Yn>zR I  
当然,实际用起来,SOCKET编程最麻烦的就是调试了。 0 l@P]_qq`  
其实,你应该有看过WEB类似的界面,或者说有些木马实现了类似功能。 to 6Q90(  
在这里面IE/CHROME是客户端,而IIS+网站代码构成了**端。
级别: 北风资深评论员


UID: 471051
精华: 0
发帖: 5449
威望: 7518 点
学点: 8435 点
贡献: 216 点
好评: 0 点
学币: 116 个
注册时间: 2014-07-03
最后登录: 2015-04-06
地板(3楼)  发表于: 2015-01-29 01:21||

在数据库****一个**来实现,只有这个方案了。 61~7 L^882  
M~ku 4ZP  
其它的方案呢,也不是完全没有: P;U(2;9 N  
1、如果是在局域网里,有**器的权限(是AD就最好了) 2r"J"C  
2、如果不是局域网,是否支持\\host方式访问呢? -d4|EtN  
3、如果不是局域网,可以创造条件建立局域网,比如VPN E0)43  
以上方案都可行,但是成本太高,还不如在**器写一个service呢。