SQL Server 2005 与VS2005编程语言C# winform实现数据库备份与恢复。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 2005 与VS2005编程语言C# winform实现数据库备份与恢复。相关的知识,希望对你有一定的参考价值。
我使用的是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 正在异常终止。
参考技术A 停掉数据库服务器。将刚才生成的数据库的日志文件*_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'
--------------------------------------------------------------------------------
vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误
以前连接是正常的,就这两天连不上了。(没有耐心的直接看末尾解决办法)
错误消息如下:
1.尝试读取或写入受保护的内存。这通常指示其他内存已损坏。(System.Data)
2.已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)(Microsoft SQL Server)
然后就Management崩溃了。
没办法,那就使用vs当中的服务器资源管理器连接吧,结果可想而知,其中vs版本2008,2010,2012,2013均崩溃。无语,怎么办,联系服务器客服,说了半天,没办法,下了个Sql server2008的客户端 试试,没想到真连上了。
这不是高潮,高潮是我写代码发现ExecuteNonQuery()执行时报同样的错误,这怎么办,蛋碎。。。System.Data.SqlClient都用不了。愤怒,换成System.Data.OleDb,奇迹出现了,好了。
这一下提醒了我,然后就在vs的服务器资源管理器里设置数据源提供程序:
结果应该猜到了,正常了。
看到这里你一定以为纠结终于结束了,错,Sql server 2012里还是不可以啊,登陆界面选项里没哟设置数据源提供程序的地方,怎么办?看网上说使用Management连接其他数据库,比如连接Oracle,可以使用链接服务器连接,配置ODBC。坑爹的是ODBC都弄好的,测试都成功了,但这里就是失败。
至今没搞定从Sql server 2012 Management Studio里连接,谁知道的帮我下,我更新到文章了,希望后面踩到这个坑的顺利些,不要在这上面浪费时间。
啰嗦了这么多,我先给出暂时的解决方案,后续再补充:
- 使用Sql server 2008客户端
- 在程序中使用System.Data.OleDb代替System.Data.SqlClient
Append:
感谢高海东的解决方案,经验证,确实是迅雷引起的异常,卸载掉迅雷的所有产品后,问题得到解决。
疑惑的是之前也在使用迅雷,或许是迅雷自动更新的某些组件引起的,记得当时win8刚出来时,迅雷也引起IE10崩溃。具体原理就不得而知了,先这样吧。
感谢 jaypgcool :也许是迅雷更改了winsock的某些设置,重置了一下winsock就OK了,命令:netsh winsock reset
原文地址:
http://blog.csdn.net/qq282030166/article/details/23184469
以上是关于SQL Server 2005 与VS2005编程语言C# winform实现数据库备份与恢复。的主要内容,如果未能解决你的问题,请参考以下文章
如何使用VS2008中集成的SQL Server 2005 Express?
SQL Server 2008 VS 2005 Reporting Services 整合SharePoint 2007 支持比较Part1
vs2005和sql2005都提示没找到或者访问连接不到服务器,
SQL Server 2005 Express 安装在 SQL Server 2008 Express 之后