我在将数据库DBName.mdf
附加到网络SQL Server时遇到问题。管理员可以手动附加数据库,但如果我尝试,我会收到以下错误消息。
数据库' DBName'无法升级,因为它是只读的,具有只读文件或用户没有权限修改某些文件。使数据库或文件可写,然后重新运行恢复。 (Microsoft SQL Server,错误:3415)
这是我的代码:
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = @"Server=" + SQLServerName + ";database=master;User ID=" + UserName + ";Pwd=" + Password; ;
try
{
conn.Open();
System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand("CREATE DATABASE DBName ON ( FILENAME = '" + @"C:\DBName.mdf" + "' ), ( FILENAME = '" + @"C:\DBName_log.ldf" + "' ) FOR ATTACH", conn);
com.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
以下是SQL Server的详细信息
- Product - Microsoft SQL Server Express Edition (64-bit)
- Version - 11.0.2218.0
我可以创建一个新数据库,但不能附加现有数据库。我在这里缺少什么?
任何帮助将不胜感激。
答案 0 :(得分:11)
我弄清楚问题是什么。
此链接有助于解决问题。 http://www.sqlservercentral.com/Forums/FindPost1367859.aspx
运行SQL Service的用户对该文件夹没有完全访问权限。我给了用户完全许可,一切正常。
答案 1 :(得分:5)
尝试通过SQL Server管理工作室进行连接时遇到了同样的错误 以管理员身份运行SQL Server Management Studio为我解决了这个问题。 从这里收集的信息http://www.nickyvv.com/2013/02/database-databasename-cannot-be.html。
答案 2 :(得分:1)
我也面临类似的问题,我使用Butters和pblack上面列出的两种方法解决了这个问题。总结一下:
如果您的服务中的“登录身份”用户是用户帐户,请确保该用户帐户对该文件夹具有完全控制权。
如果您的服务中的“登录身份”用户是“网络服务”或“本地系统”,那么这些帐户应该已有权访问,但请继续添加并授予他们完全控制权。
最后,使用管理权限运行SQL Server管理工作室
答案 3 :(得分:0)
我在使用T-SQL脚本时也遇到了类似的情况,但我选择了另一种通过SSMS的方式。以下是一些简单的步骤,这些步骤对于通过SQL Server Management Studio附加SQL MDF文件非常有帮助。