C# 将数据库(.mdf文件)附加到SQL Server时出错

C# 将数据库(.mdf文件)附加到SQL Server时出错,c#,sql-server,C#,Sql Server,将数据库DBName.mdf附加到网络SQL Server时遇到问题。管理员可以手动附加数据库,但如果我尝试,会收到以下错误消息 无法升级数据库“DBName”,因为它是只读的、具有只读文件,或者用户没有修改某些文件的权限。使数据库或文件可写,然后重新运行恢复。(Microsoft SQL Server,错误:3415) 这是我的密码: System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnecti

将数据库
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
我可以创建一个新数据库,但无法附加现有数据库。我错过了什么?


任何帮助都将不胜感激。

我发现了问题所在

这个链接有助于找出问题所在。


运行SQL服务的用户没有对该文件夹的完全访问权限。我给了用户完全的权限,一切正常。

在使用T-SQL脚本时,我也遇到了类似的情况,但我通过SSMS选择了另一种方式。下面是一些简单的步骤,它们对您通过SQLServerManagementStudio附加SQLMDF文件非常有帮助

  • 执行开始按钮->所有程序->SQL Server XXXX->SQL Server Management Studio
  • 登录它
  • 选择对象资源管理器已登记数据库
  • 然后右键单击它并选择“附加数据库”
  • 数据库附件窗口出现在屏幕上,然后单击添加按钮
  • 然后,您需要选择要附加的MDF文件并单击“确定”
  • 确认并单击“确定”
  • 数据库已成功连接。您可以在“数据库”列表中签出

  • 我试图通过SQL server management studio进行连接时遇到了相同的错误。
    以管理员身份运行SQLServerManagementStudio为我解决了这个问题。
    从这里收集的信息

    我也遇到了类似的问题,我使用上面Butters和pblack列出的两种方法解决了它。概括而言,它们是:

    • 转到系统服务并查找SQL Server数据库服务
    • 右键单击服务并选择属性
    • 转到“登录”选项卡
    • 如果您服务中的“以用户身份登录”用户是用户帐户,请确保该用户帐户对该文件夹具有完全控制权

    • 如果您的服务中的“登录身份”用户是“网络服务”或“本地系统”,则这些帐户应该已经具有访问权限,但请继续添加它们并给予它们完全控制权

    • 最后,使用管理权限运行SQL Server management studio


    你能试着在(文件名=”+@“C:\DBName.mdf”+”),(文件名=”+@“C:\DBName\u log.ldf”+”)上创建数据库DBName以附加“手册”吗?它工作吗?如果我这样做,它会给出上面的错误。如果该SQL Server机器的管理员执行此操作,那么它工作正常。因此,您需要管理员凭据来执行此操作。您在这里使用的是
    conn.ConnectionString=@“Server=“+SQLServerName+”;database=master;User ID=“+UserName+”;Pwd=“+Password;”管理员登录?也许你必须给你的MS SQL Server用户更多的自由:)基本上。但是为什么呢?我可以在那个服务器上创建数据库。为什么我需要附加数据库的管理员权限?请阅读这里和这里的优秀解决方案。尝试移动Enterprise Vault SQL数据库文件3个小时后,我将SQL Server服务登录帐户添加到目标文件夹,bingo能够连接数据库。非常感谢。