C# 如何实现备份恢复SQL2005数据库????

gaiwa 2009-12-31 09:54:13
如题,请提供代码.谢谢.
...全文
449 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangzhl 2009-12-31
  • 打赏
  • 举报
回复
给你一个
try
{
//设置SQL语句
string sqlstr = "";
sqlstr = "BACKUP DATABASE PMS TO DISK='" + txtFile.Text.Trim() + "'";

//调用sqlcmd()方法
baseclass.DBOperate.sqlcmd(sqlstr);
//显示数据库是否备份成功的提示信息
MessageBox.Show("数据备份成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//捕捉异常
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

恢复的
try
{
//设置SQL语句
string sqlstr = "";
sqlstr = "USE master RESTORE DATABASE PMS FROM DISK='" + txtFile.Text.Trim() + "'";
try
{
//调用sqlcmd()方法
baseclass.DBOperate.sqlcmd(sqlstr);
//显示数据库是否备份成功的提示信息
MessageBox.Show("数据库恢复成功!", "提示", MessageBoxButtons.OK);
}
//捕捉异常
catch (Exception ex)
{
//显示异常
MessageBox.Show(ex.ToString());
}
//判断数据库是否处于打开状态
if (baseclass.DBConn.rscon.State == ConnectionState.Open)
{
//关闭数据库连接
baseclass.DBConn.con_close();
}
//连接数据库字符串
string DBStr = "Server=.;DataBase=PMS; Integrated Security=SSPI";
SqlConnection conn = new SqlConnection(DBStr);
conn.Open();

//-------------------杀掉所有连接 PMS 数据库的进程--------------
string strSQL = "select spid from master..sysprocesses where dbid=db_id( 'PMS') ";
SqlDataAdapter sda = new SqlDataAdapter(strSQL, conn);

DataTable spidTable = new DataTable();
sda.Fill(spidTable);

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;

for (int iRow = 0; iRow <= spidTable.Rows.Count - 1; iRow++)
{
//强行关闭用户进程
cmd.CommandText = "kill " + spidTable.Rows[iRow][0].ToString();
cmd.ExecuteNonQuery();
}
conn.Close();
conn.Dispose();
//--------------------------------------------------------------------

SqlConnection Tem_con = new SqlConnection(DBStr);
Tem_con.Open();
SqlCommand SQLcom = new SqlCommand("backup log PMS to disk='" + txtFile.Text.Trim() + "' restore database PMS from disk='" + txtFile.Text.Trim() + "'", Tem_con);
SQLcom.ExecuteNonQuery();
SQLcom.Dispose();
Tem_con.Close();
Tem_con.Dispose();
MessageBox.Show("数据还原成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

baseclass.DBConn.con_Open();
baseclass.DBConn.con_close();
MessageBox.Show("为了避免数据丢失,在数据库原还后将关闭整个系统。");
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
liangzhl 2009-12-31
  • 打赏
  • 举报
回复
这个网上很多啊,自己找
gaiwa 2009-12-31
  • 打赏
  • 举报
回复
我把everyone的写权限给了后就可以了.
但是为什么我administrator的用户有写权限不可以呢?
难道执行sql不是administrator用户?
我是用的oledbcommand执行的SQL
wiki14 2009-12-31
  • 打赏
  • 举报
回复
那是不是你的数据库还开着啊?要关闭,

或者是你重复开了这个功能
gaiwa 2009-12-31
  • 打赏
  • 举报
回复
我是用ADMINISTRATOR登录的啊,有权限吧
wiki14 2009-12-31
  • 打赏
  • 举报
回复
楼主,你的磁盘是什么格式(FAT32 NTFS),
NTFS下右击磁盘--->属性--->安全--->查看用户的权限


应该是个权限问题。

备份数据库的代码楼上给了。
wiki14 2009-12-31
  • 打赏
  • 举报
回复
你的帐号可能没有访问磁盘的权限,换个用户试下
gaiwa 2009-12-31
  • 打赏
  • 举报
回复
TO pt1314917>
执行SQL报错"无法打开备份设备"
wuyq11 2009-12-31
  • 打赏
  • 举报
回复
调用存储过程或执行语句
CREATE proc dbo.Data_Backup @dbname sysname='',@bkpath nvarchar(260)='',@bkfname nvarchar(260)='',@bktype nvarchar(10)='DB',@appendfile bit=1
as declare @sql varchar(8000) if isnull(@dbname,'')='' set @dbname=db_name() if isnull(@bkfname,'')=''
set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK' set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname),'\DATE\',convert(varchar,getdate(),112)),'\TIME\',replace(convert(varchar,getdate(),108),':',''))
update XTSZ set FNAME=@bkfname
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname +' to disk='''+@bkpath+@bkfname +''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end+case @appendfile when 1 then 'NOINIT' else 'INIT' end
exec(@sql)

USE master
EXEC sp_addumpdevice 'disk', 'MyNwind',
'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyNwind.dat'

http://topic.csdn.net/u/20090309/16/ff3be606-3865-4f7a-a05e-5961ad48314d.html
pt1314917 2009-12-31
  • 打赏
  • 举报
回复

--用SQL语句备份、还原数据库
BACKUP DATABASE test --这里的test指的是数据库名称
TO disk = 'c:\backup.bak' --这里指名的数据库路径(backup.bak为备份文件名)
WITH FORMAT


RESTORE DATABASE jz1 --所被恢复的数据库名称
FROM disk = 'c:\backup.bak' --本地硬盘路径(backup.bak为备份文件名)
GO
liuy052 2009-12-31
  • 打赏
  • 举报
回复
google.com

110,577

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧