日期:2014-05-17  浏览次数:21157 次

c# 窗体程序 还原如何实现还原.bak备份文件,和导出数据到Excel有人做过吗?
实现还原.bak备份文件
USE MASTER
restore database DBGDSystem from disk='D:\backup\backup.bak' WITH REPLACE
这段话不知道为什么要重启sql服务才能成功

消息 3101,级别 16,状态 1,第 2 行
因为数据库正在使用,所以无法获得对数据库的独占访问权。
消息 3013,级别 16,状态 1,第 2 行
RESTORE DATABASE 正在异常终止。

不知道要怎么解决?

网上搜到的都看不大懂求前辈们指导一下 ~ 

导出数据到Excel的有人做过吗? 我看人家的代码?各种报错各种不懂啊 悲哀~

------解决方案--------------------
实现还原.bak备份文件 应该先杀死进程在还原,否则就报正在使用。
参考
http://hi.baidu.com/ymtvwtejypbmpwr/item/778808bc60a63e71254b09fc

导出数据到Excel
1 使用OFFICE开发包.. 参楼上的.
2 实行数据库 OLEDB 进行操作EXCEL 或则SQL语句都可以
3 直接输出文字 \t 代表下一个单元格 \r\n代表新行 ~代表字符. 输入的扩展名为XLS EXCEL直接就可以打开了

参考
http://topic.csdn.net/u/20090409/09/174bffda-0e3e-4ea1-8997-42ab1e0af404.html
http://www.cnblogs.com/sufei/archive/2009/05/23/1487540.html
------解决方案--------------------
恢复数据库要kill当前连接
CREATE proc RestoreDb @bkfile nvarchar(1000),@dbname sysname='',@dbpath nvarchar(260)='',@retype nvarchar(10)='DB',@filenumber int=1, @overexist bit=1,@killuser bit=1
as declare @sql varchar(8000) if isnull(@dbname,'')=''select @sql=reverse(@bkfile),@sql=case when charindex('.',@sql)=0 then @sql else substring(@sql,charindex('.',@sql)+1,1000) end ,@sql=case when charindex('\',@sql)=0 then @sql else left(@sql,charindex('\',@sql)-1) end,@dbname=reverse(@sql)
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname+' from disk='''+@bkfile+''''+' with file='+cast(@filenumber as varchar) +case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end +case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
print @sql
if @overexist=1 and @killuser=1
begin declare @spid varchar(20) declare #spid cursor for select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname) open #spid fetch next from #spid into @spid while @@fetch_status=0 begin exec('kill '+@spid) fetch next from #spid into @spid End close #spid deallocate #spid End
exec (@sql)

打开EXCEL模版,遍历数据集,赋值到单元格