上一主题下一主题
关键字
主题 : 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界面操作备份选择目录的时候得到 h76j|1gI  
declare @Path nvarchar(255) |cY HH$  
declare @Name nvarchar(255) # atq7t X  
$EFS_*<X  
U!|)M  
select @Path = N'C:' @QmN= X5  
j67a?0<C2U  
-nNKUt .I  
=H;n$ -P  
        create table #filetmpfin (Name nvarchar(255) NOT NULL, IsFile bit NULL) /W,hOv  
        if(@Name is null) 3 twA5)v  
        begin $||WI}k3V  
            create table #filetmp (Name nvarchar(255) NOT NULL, depth int NOT NULL, IsFile bit NULL ) ),N,!15j,  
            insert #filetmp EXECUTE master.dbo.xp_dirtree @Path, 1, 1 KU $,{Sn6@  
            insert #filetmpfin select Name, IsFile from #filetmp f ]}/Rl}_  
            drop table #filetmp dM^ EYW  
        end moxmQ>xoH  
        if(NOT @Name is null) x @43ZH_  
        begin ir .RO7f  
            declare @FullName nvarchar(300) -hnNa A  
            if(@Path is null) $BehU  
                select @FullName = @Name 6inAnC@I  
            else #^VZJ:2=|  
                select @FullName = @Path     + '\' + @Name k ?KJ8  
            create table #filetmp2 ( Exist bit NOT NULL, IsDir bit NOT NULL, DirExist bit NULL ) }6a}8EyFP  
            insert #filetmp2 EXECUTE master.dbo.xp_fileexist @FullName [#Apd1S_  
            insert #filetmpfin select @Name, 1-IsDir from #filetmp2 where Exist = 1 or IsDir = 1 drop table #filetmp2 nQV0I"f]?]  
        end P0>2}/;o  
         %R?7u '=~  
\}h   
]CLM'$  
SELECT L~/,;PHN  
Name AS [Name], Zfk]Z9YO  
IsFile AS [IsFile] I]d-WTd  
FROM *y?6m,38V  
#filetmpfin 4r4 #u'Om  
ORDER BY 0'6ai=W  
[IsFile] ASC,[Name] ASC N4,oO H~  
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的关系)。 rL=$WxdPU  
你在管理端看到的不过是**端看到,然后传过来告诉管理端而已,原理就这么简单。 $((<le5-)  
当然,实际用起来,SOCKET编程最麻烦的就是调试了。 ! bp"pa9  
其实,你应该有看过WEB类似的界面,或者说有些木马实现了类似功能。 ; F=_ozWV*  
在这里面IE/CHROME是客户端,而IIS+网站代码构成了**端。
级别: 北风资深评论员


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

在数据库****一个**来实现,只有这个方案了。 (-<hx~  
fhi}x(  
其它的方案呢,也不是完全没有: &D<6Go/)_*  
1、如果是在局域网里,有**器的权限(是AD就最好了) X#1WzWk '  
2、如果不是局域网,是否支持\\host方式访问呢? taDe^Ist j  
3、如果不是局域网,可以创造条件建立局域网,比如VPN Up Z 9g"  
以上方案都可行,但是成本太高,还不如在**器写一个service呢。