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 正在异常终止。 展开
{
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 正在异常终止。 展开
2个回答
展开全部
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
自己试试吧。这样收获更多。
这就是停止服务区,另外。。如果是还原数据库而且是定时的话,建议用 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
自己试试吧。这样收获更多。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
停掉数据库服务器。
将刚才生成的数据库的日志文件*_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'
--------------------------------------------------------------------------------
将刚才生成的数据库的日志文件*_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# 停止数据库服务 有很多答案的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询