C#怎么备份和恢复数据库(SQL SEVER 2005)?

coosiu 2010-04-21 02:36:31
rt, 不是用的sql2000 我知道sql2000里面用的是sqldmo,


现在公司里面用的是sql2005请问如何在winform中用sql2005数据库实现备份和恢复呢?


小弟第一次发帖询问望各位csdn的高手多帮忙。
...全文
518 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
coosiu 2010-04-22
  • 打赏
  • 举报
回复
小弟在这里感谢各位回复的朋友


其实我是想知道在sql2005里面怎么用smo来实现这些功能,

因为我记得sql2000里面可以用dmo来实现大多数需要手动才可以实现的功能~
coosiu 2010-04-22
  • 打赏
  • 举报
回复
恢复的呢?楼上的朋友。
yuanhuiqiao 2010-04-22
  • 打赏
  • 举报
回复
备份:

private void button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "data source=IPAddress; initial catalog=DBName; User ID=sa; PWD=password";
con.Open();
SqlCommand cmd = new SqlCommand("", con);
cmd.CommandText = @"backup database DBName to disk='d:\bakfilename.bak'";
cmd.ExecuteNonQuery();
con.Close();
}
catch (SqlException ex)
{
throw ex;
}
}
coosiu 2010-04-22
  • 打赏
  • 举报
回复
我试下,先谢过zhenonline朋友~
zhenonline 2010-04-22
  • 打赏
  • 举报
回复
上面的就是sql server 2005数据库备份与数据恢复,我感觉用着不错
zhenonline 2010-04-22
  • 打赏
  • 举报
回复
数据库恢复
------------------------------------------------------------------------------
try
{
sd1.InitialDirectory = Application.StartupPath + @"\";
sd1.Filter = "备份文件(*.bak)|*.bak|所有文件(*.*)|*.*";
if (sd1.ShowDialog() == DialogResult.OK)
{


string path = sd1.FileName.ToString();
string dbname = "mydb0";
SqlConnection con = new SqlConnection("server=" + myconifg.servername + ";uid=" + myconifg.username + ";pwd=" + myconifg.pwd + ";database=" + myconifg.databasename);
con.Open();
SqlCommand com = new SqlCommand();

com.CommandText = "use master restore database " + dbname + " from disk='" + path + " '" + " with replace";

// MessageBox.Show(com.CommandText);
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
con.Dispose();
MessageBox.Show("数据库恢复成功");

}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}




------------------------------------------------------------------------------
zhenonline 2010-04-22
  • 打赏
  • 举报
回复
数据库备份
------------------------------------------------------------------------------
try
{
sd.InitialDirectory = Application.StartupPath + @"\";
sd.Filter = "备份文件(*.bak)|*.bak|所有文件(*.*)|*.*";
if (sd.ShowDialog() == DialogResult.OK)
{
if (!File.Exists(sd.FileName.ToString()))
{
SqlConnection con = new SqlConnection("server=" + myconifg.servername + ";uid=" + myconifg.username + ";pwd=" + myconifg.pwd + ";database=" + myconifg.databasename);//连接服务器
con.Open();
SqlCommand com = new SqlCommand();
//this.textBoxX1.Text = sd.FileName.ToString();
com.CommandText = "backup database " + "brmine" + " to disk='" + sd.FileName.ToString() + "'";
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
con.Dispose();
MessageBox.Show("数据库备份成功");

}
else
{
MessageBox.Show("请重新命名!!");
}
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}

------------------------------------------------------------------------------
l13873666736 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 coosiu 的回复:]
10楼的朋友我知道backup database DBNAME to disk='d:\bakfilename.bak'这句在数据库里好用

那在winform窗体中怎么使用呢?
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "backup database DBNAME to disk='d:\bakfilename.bak'"……
[/Quote]
對就是這樣,
我做了一個控制台的,沒問題。
535cheng110 2010-04-22
  • 打赏
  • 举报
回复

OleDbConnection oleCnn = new OleDbConnection(你的数据库连接字符串);
oleCnn.Open();
OleDbCommand oleCmd = new OleDbCommand();
oleCmd.Connection = oleCnn;
oleCmd.CommandType = CommandType.StoredProcedure;
oleCmd.CommandText = "[你的存储过程]";
oleCmd.ExecuteNonQuery();
535cheng110 2010-04-22
  • 打赏
  • 举报
回复
收藏 回复内容太短了!
coosiu 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wuyq11 的回复:]

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,'')=''……
[/Quote]

这个是???这是在winform窗体中用的吗?迷糊。呵呵
wuyq11 2010-04-21
  • 打赏
  • 举报
回复
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'
HELLOWORDC 2010-04-21
  • 打赏
  • 举报
回复
标记,也正在考虑这个问题~,共同学习!
coosiu 2010-04-21
  • 打赏
  • 举报
回复
没人回答了么?

4楼说的挺对的,但是在winform中如何执行呢?新手,望解答呀。。
coosiu 2010-04-21
  • 打赏
  • 举报
回复
10楼的朋友我知道backup database DBNAME to disk='d:\bakfilename.bak'这句在数据库里好用

那在winform窗体中怎么使用呢?
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "backup database DBNAME to disk='d:\bakfilename.bak'";
这样写不对吧??
  • 打赏
  • 举报
回复
5L发的是执行SQL语句从备份文件路径恢复DB。
拷贝的项目中的一个函数。
l13873666736 2010-04-21
  • 打赏
  • 举报
回复
其实这个很简单,SQL本来就可以备份,有SQL 指令的,但是,这个只能把备份文件放在SQL SERVER所在的那台服务器。
backup database DBNAME to disk='d:\bakfilename.bak'
在SQL 指行这条就可以了
如果要保存到其它的电脑要先建立连接,在SQL里执行这个就好了
master..xp_cmdshell 'net use \\电脑名称\共享文件夹名 密码/user:用户名'
其实就是在SQL里执行NET USE(DOS命令)
然后备份的路径就可以用
disk='\\电脑名称\共享文件夹名\bakfilename.bak'

SQL2005 的 master..xp_cmdshell 默认是不能用的,BAIDU一把就知道怎么打开了。
coosiu 2010-04-21
  • 打赏
  • 举报
回复
再次强调一下是在winform窗体上有一备份和恢复的两个按钮, 来进行sql2005的数据的备份和恢复


7楼的兄弟说的不对,客户哪会那么多呀,他们要做的就是直接用软件就好,剩下的要我们自己实现呀
coosiu 2010-04-21
  • 打赏
  • 举报
回复
4,5楼的大哥发的什么????小弟实在不才。不懂


刚刚自己在网上搜索了一下:http://blog.csdn.net/virusplayer/archive/2007/07/16/1693454.aspx

各位看看对不对???
porschev 2010-04-21
  • 打赏
  • 举报
回复
如果不会sql语句备份。。手动备份也行啊。。。。
加载更多回复(6)

110,576

社区成员

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

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

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