SQL Server 2005 与VS2005编程语言C# winform实现数据库备份与恢复。

我使用的是SQLServer2005与VS2005在C#语言下编写winform,由于是C\S模式的数据库共享所以在恢复的时候出现了问题。大体框架是这样的:我用vs200... 我使用的是SQL Server 2005 与VS2005在C#语言下编写winform,由于是C\S模式的数据库共享所以在恢复的时候出现了问题。大体框架是这样的:我用vs2005编写的顾客端以及服务端winform都访问sqlserver2005里面的restaurant.mdf,我备份的代码如下: try
{
string sqltxt = @"BACKUP DATABASE [Restaurant] TO Disk='e:\\" + textBox1.Text + ".bak" + "'";
SqlConnection myConn = new SqlConnection();
db.myConn.Open();
SqlCommand cmd = new SqlCommand(sqltxt, db.myConn);
cmd.ExecuteNonQuery();
db.myConn.Close();
if (MessageBox.Show("数据库备份成功,备份在E盘中。", "备份成功", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK)
{
this.Close();
}
} catch (Exception ex)
{MessageBox.Show(ex.Message.ToString());}
这个成功了。还原代码如下: try{
SqlConnection myConn = new SqlConnection();
db.myConn.Open();
SqlCommand cmd = db.myConn.CreateCommand();
cmd.CommandText = "alter database Restaurant modify name=Restaurant1";
cmd.ExecuteNonQuery();
cmd.CommandText = "use master restore database [Restaurant.mdf] from Disk='" + textBox1.Text.Trim() + "'";
cmd.ExecuteNonQuery();
if (MessageBox.Show("恢复成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK)
{
this.Close();
}
} catch (Exception ex)
{}
出现错误:消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\Restaurant.mdf'。数据库 'Restaurant1' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'Restaurant' 无法还原为 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\Restaurant.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。
消息 1834,级别 16,状态 1,第 1 行
无法覆盖文件 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\RESTAURANT_1.ldf'。数据库 'Restaurant1' 正在使用该文件。
消息 3156,级别 16,状态 4,第 1 行
文件 'Restaurant_log' 无法还原为 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\RESTAURANT_1.ldf'。请使用 WITH MOVE 选项来标识该文件的有效位置。消息 3119,级别 16,状态 1,第 1 行在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。消息 3013,级别 16,状态 1,第 1 行RESTORE DATABASE 正在异常终止。
展开
 我来答
jadilee
2011-12-04 · TA获得超过472个赞
知道小有建树答主
回答量:475
采纳率:40%
帮助的人:198万
展开全部
net stop mssqlserver
这就是停止服务区,另外。。如果是还原数据库而且是定时的话,建议用 SQL自带的 服务去做,简单设置下就行了。
.NET里面执行如下:
VB.NET的
Dim proc As System.Diagnostics.Process
proc = System.Diagnostics.Process.Start("net stop mssqlserver")
proc.WaitForExit()
proc.Close()

c#的如下:
System.Diagnostics.Process proc;
proc = System.Diagnostics.Process.Start("net stop mssqlserver");
proc.WaitForExit();
proc.Close();

我记得好像是不能有访问来着,服务暂停了,你立刻在启用下,然后就开始执行还原嘛。
Dim proc As System.Diagnostics.Process
proc = System.Diagnostics.Process.Start("net stop mssqlserver")
proc.WaitForExit()
proc = System.Diagnostics.Process.Start("net start mssqlserver")
proc.Close()
然后这里执行你还原的脚本就好了。

补充下,如果你不会暂停我这里有批处理文档
“启动SQL SERVER.bat”:

@echo.服务启动......
@echo off
@sc start MSSQLSERVER
@sc start SQLSERVERAGENT
@sc start MSSQLServerOLAPService
@sc start msftesql
@sc start MsDtsServer
@sc start SQLWriter
@echo off
@echo.启动完毕!
@pause

“停止SQL SERVER.bat”:

@echo.服务停止......
@echo off
@sc stop SQLSERVERAGENT
@sc stop MSSQLServerOLAPService
@sc stop msftesql
@sc stop MsDtsServer
@sc stop SQLWriter
@sc stop MSSQLSERVER
@echo off
@echo.停止完毕!
@pause

自己试试吧。这样收获更多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lang2858
2011-12-04 · TA获得超过122个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:131万
展开全部
停掉数据库服务器。

将刚才生成的数据库的日志文件*_log.ldf删除,用要恢复的数据库mdf(*.mdf)文件覆盖刚才生成的数据库数据文件*.mdf。

启动数据库服务器。

restore database DemoDB from disk='c:\a.bak' --c:\a.bak是备份文件名 with move 'demodb_data01' to '...\demodb_data01.mdf' --将要恢复到文件 ,move ..... ,move 'demodb_log' to '...\demodb_log.ldf'
--------------------------------------------------------------------------------
追问
因为这些都是界面操作的,我用代码怎么实现停掉数据库服务器?(我是第一次编写winform用到数据库,见谅。)
追答
百度搜索 sql c# 停止数据库服务 有很多答案的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式