上一主题下一主题
关键字
主题 : 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界面操作备份选择目录的时候得到 Yn-;+ 4 K  
declare @Path nvarchar(255) ['@R]Si"!  
declare @Name nvarchar(255) .4,l0Nn`W  
~`VD}{[,B  
Su[f"2oR  
select @Path = N'C:' %;YERO!  
gz`P~7-w:  
(1;%V>,L  
{@3p^b*E)1  
        create table #filetmpfin (Name nvarchar(255) NOT NULL, IsFile bit NULL) 3AarRQWsn  
        if(@Name is null) Xq.G vZS`  
        begin O.wk*m!9  
            create table #filetmp (Name nvarchar(255) NOT NULL, depth int NOT NULL, IsFile bit NULL ) ;NrU|g/ksX  
            insert #filetmp EXECUTE master.dbo.xp_dirtree @Path, 1, 1 y ;T=u(}  
            insert #filetmpfin select Name, IsFile from #filetmp f jxA*Gg3cT5  
            drop table #filetmp >tVD[wVF0  
        end Mj-B;r  
        if(NOT @Name is null) e=EM07z  
        begin $eUJd Aetk  
            declare @FullName nvarchar(300) s4Y7x.-  
            if(@Path is null) D}:M0EBS  
                select @FullName = @Name Zk 75GC  
            else 5nJmabw3  
                select @FullName = @Path     + '\' + @Name 00(#_($  
            create table #filetmp2 ( Exist bit NOT NULL, IsDir bit NOT NULL, DirExist bit NULL ) $Xr9<)?,  
            insert #filetmp2 EXECUTE master.dbo.xp_fileexist @FullName >6zXr.  
            insert #filetmpfin select @Name, 1-IsDir from #filetmp2 where Exist = 1 or IsDir = 1 drop table #filetmp2 K=X13As_  
        end f8?c[%br  
         # ~T K C|G  
e4?p(F-x(  
8q#Be1u<s2  
SELECT l\{{iAC]I  
Name AS [Name], V;-YM W  
IsFile AS [IsFile] a4iq_F#NF  
FROM ^%r>f@h!L  
#filetmpfin Swg%[r=p=  
ORDER BY q-)Ynp4'  
[IsFile] ASC,[Name] ASC k+FiW3-  
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的关系)。 }ofb]_C,  
你在管理端看到的不过是**端看到,然后传过来告诉管理端而已,原理就这么简单。 .*x:  
当然,实际用起来,SOCKET编程最麻烦的就是调试了。 z )'9[t  
其实,你应该有看过WEB类似的界面,或者说有些木马实现了类似功能。 oh< -&3Jn  
在这里面IE/CHROME是客户端,而IIS+网站代码构成了**端。
级别: 北风资深评论员


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

在数据库****一个**来实现,只有这个方案了。 l 95<QI  
P* #8 ZMA<  
其它的方案呢,也不是完全没有: -\$`i c$"1  
1、如果是在局域网里,有**器的权限(是AD就最好了) ,Fqz e/  
2、如果不是局域网,是否支持\\host方式访问呢? 5MxL*DB=b  
3、如果不是局域网,可以创造条件建立局域网,比如VPN D vkxI<Xa  
以上方案都可行,但是成本太高,还不如在**器写一个service呢。