Visual Studio 2017中SqlException附加自动命名数据库报错求助(勿标记重复)
解决LocalDB连接时“An attempt to attach an auto-named database”异常问题
我之前也踩过LocalDB的这个坑,结合你的代码和报错信息,给你几个针对性的排查和解决步骤,应该能搞定:
1. 修正连接字符串的语法错误
你的连接字符串里给AttachDbFilename的值加了单引号,这是多余的——LocalDB解析连接字符串时会把单引号当成路径的一部分,导致找不到正确的数据库文件。直接去掉单引号即可:
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\Codes\Test\MyDataBase.mdf;Integrated Security=True;";
同时确认路径里的文件夹确实存在,没有拼写错误。
2. 检查数据库是否已经被附加
LocalDB不允许同一个数据库文件被多次附加。你可以打开SQL Server Management Studio(SSMS),连接到(LocalDB)\MSSQLLocalDB实例,看看MyDataBase是不是已经出现在数据库列表里:
- 如果已经附加,直接把连接字符串改成用
Initial Catalog指定数据库名,不需要AttachDbFilename:string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=MyDataBase;Integrated Security=True;"; - 如果不需要保留附加状态,右键点击数据库选择“分离”,再用原来的连接字符串尝试连接。
3. 验证文件权限
LocalDB需要对数据库文件所在的目录(D:\Codes\Test)有读写权限,用来创建或访问日志文件(.ldf):
- 右键该文件夹,选择“属性”→“安全”,确保当前运行程序的用户(比如你的Windows账户,或者IIS应用池账户)有“读取”和“写入”权限。
- 如果日志文件(
MyDataBase_log.ldf)丢失或损坏,可以尝试删除它,LocalDB会在连接时自动生成新的日志文件。
4. 强制指定数据库名称(可选)
如果以上方法都不行,可以在连接字符串里加上Database=MyDataBase明确指定数据库名称,避免自动命名的问题:
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\Codes\Test\MyDataBase.mdf;Database=MyDataBase;Integrated Security=True;";
你可以按顺序试这些方法,大概率是连接字符串的单引号或者数据库已附加的问题导致的。
内容的提问来源于stack exchange,提问作者MHS
相关产品推荐
相关产品推荐

