数据库问题,用SQL server 2012 附加 SQL server 2000 的数据库文件,出现如下提示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库问题,用SQL server 2012 附加 SQL server 2000 的数据库文件,出现如下提示相关的知识,希望对你有一定的参考价值。
标题: Microsoft SQL Server Management Studio
------------------------------
无法为该请求检索数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)
------------------------------
C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\renyuan.mdf 不是主数据库文件。 (Microsoft SQL Server,错误: 5171)
那SQL 2008 和 SQL 2005 了,有没有一个兼容软件啊
参考技术C 应该是不兼容的在 C# 中附加 SQL Server 数据库
【中文标题】在 C# 中附加 SQL Server 数据库【英文标题】:Attach SQL Server database in C# 【发布时间】:2016-09-01 07:02:07 【问题描述】:我正在用 C# 开发一个项目。我想使用 SMO 从 C# 代码中分离然后附加 SQL Server 数据库。我可以分离数据库,但是当我想附加它时,出现错误:
无法打开物理文件“C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale.mdf”。操作系统错误 5:“5(拒绝访问。)”。
代码:
OpenFileDialog f = new OpenFileDialog();
f.Title = "sqlbakcup";
f.FileName = "";
f.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
if (f.ShowDialog() == DialogResult.OK)
SqlConnection sqlconn = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True");
ServerConnection serverconn = new ServerConnection(sqlconn);
Server s = new Server(serverconn);
s.DetachDatabase("ghale", false);
//MessageBox.Show("ok");
SqlConnection sqlconn1 = new SqlConnection(@"Data Source=.;Initial Catalog=mydb2;Integrated Security=True");
SqlCommand sqlcmd = new SqlCommand("ALTER DATABASE mydb2 SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + "RESTORE DATABASE [mydb2] FROM DISK = @n WITH REPLACE ", sqlconn1);
sqlcmd.Parameters.AddWithValue("@n", f.FileName);
sqlconn1.Open();
sqlcmd.ExecuteNonQuery();
sqlconn1.Close();
SqlConnection sqlconn2 = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True");
ServerConnection serverconn2 = new ServerConnection(sqlconn2);
Server s1 = new Server(serverconn2);
s1.AttachDatabase("ghale", new StringCollection
@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale.mdf",
@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale_log.ldf" , AttachOptions.None);
//MessageBox.Show("ok");
MessageBox.Show("OK");
【问题讨论】:
您的帖子中的 smo 是什么? @RBT: SQL Server 的共享管理对象 - 用于管理服务器及其数据库对象的库 SMO 代表 SQL Server 管理对象 好的。请发布您为附加数据库文件而编写的 SMO 的 C# 代码 How to attach sqlserver database in C#的可能重复 【参考方案1】:几个观察:
-
变量
sqlconn2
、serverconn2
和s1
是不必要的,因为您可以重复使用变量s
重新附加ghale
数据库
如果我注释掉将备份文件恢复到 mydb2
的中间部分,则重新附加 ghale
数据库将起作用
我怀疑您正在将ghale
备份文件恢复到数据库mydb2
,如果是这样,请查看数据库属性| mydb2
的文件你会看到它正在使用文件ghale.mdf
和ghale_log.ldf
。因此,您无法重新附加 ghale.mdf
,因为该文件现在正被数据库 mydb2
使用,因此出现 Access Denied 错误消息。
更新: 我认为以下代码是您想要完成的:
OpenFileDialog f = new OpenFileDialog();
f.Title = "sqlbakcup";
f.FileName = "";
f.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
if (f.ShowDialog() == DialogResult.OK)
using (SqlConnection sqlconn = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True"))
ServerConnection serverconn = new ServerConnection(sqlconn);
Server s = new Server(serverconn);
s.DetachDatabase("ghale", false);
SqlConnection sqlconn1 = new SqlConnection(@"Data Source=.;Initial Catalog=mydb2;Integrated Security=True");
SqlCommand sqlcmd = new SqlCommand(
"ALTER DATABASE [mydb2] SET SINGLE_USER with ROLLBACK IMMEDIATE use master "
+ @"RESTORE DATABASE [mydb2] FROM DISK = @n WITH REPLACE, "
+ @"MOVE 'ghale' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\mydb2.mdf', "
+ @"MOVE 'ghale_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\mydb2_log.ldf' "
+ @"ALTER DATABASE [mydb2] MODIFY FILE (NAME=N'ghale', NEWNAME=N'mydb2')"
+ @"ALTER DATABASE [mydb2] MODIFY FILE (NAME=N'ghale_log', NEWNAME=N'mydb2_log')",
sqlconn1);
sqlcmd.Parameters.AddWithValue("@n", f.FileName);
sqlconn1.Open();
sqlcmd.ExecuteNonQuery();
sqlconn1.Close();
s.AttachDatabase("ghale",
new StringCollection
@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale.mdf",
@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ghale_log.ldf" ,
AttachOptions.None);
我已更新 mydb2
数据库恢复 sql 以使用不同的物理文件存储数据和日志,并重命名逻辑名称。
【讨论】:
【参考方案2】:试试这个..
首先要找到你的sqlserver服务账号,在任务管理器中同时按ctrl+alt+delete可以看到;然后,你必须赋予“C:\”的读/写权限Murach\SQL Server 2008\Databases”到服务帐户。
【讨论】:
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA ...然后右键单击您的数据库 -> 属性 -> 安全选项卡 -> 继续 -> 选择完全控制用户以上是关于数据库问题,用SQL server 2012 附加 SQL server 2000 的数据库文件,出现如下提示的主要内容,如果未能解决你的问题,请参考以下文章
sql server2012加载以前的原有数据库的时候出现了附加错误,怎么办
SQL server 2008 r2附加数据库出现错误了,见下图,怎么解决?求帮助!!!!!