连接.mdf数据库文件时触发StackOverFlowException问题求助
问题分析与解决方法
问题场景
在已安装SQL Server的机器上打开包含.mdf数据库文件的解决方案时,运行应用触发System.StackOverflowException,异常发生在Settings.Designer.cs文件中,相关代码如下:
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\AppDatabase.mdf;Integrated Security=True;Connect Timeout=30")] public string connectionStr { get { return ((string)(this["connectionStr"])); } }
即使将数据库连接到SQL Server实例并修改连接字符串指向该实例,仍会收到相同的栈溢出错误,错误详情:
System.StackOverflowException
HResult=0x800703E9
Source=
StackTrace:
问题原因
出现栈溢出的核心原因是属性的get方法触发了无限递归:connectionStr属性的get方法返回this["connectionStr"],而Settings类的索引器在访问"connectionStr"键时,会再次调用该属性的get方法,形成无限循环,最终耗尽栈空间引发异常。
解决步骤
恢复自动生成的Designer文件
Settings.Designer.cs是Visual Studio自动生成的文件,手动修改会破坏默认逻辑。若已修改:- 若使用版本控制,直接从版本库拉取该文件的原始版本;
- 若无版本控制,删除该文件后右键项目选择“生成”,VS会自动重新生成正确的代码。
通过项目设置界面重新配置连接字符串
- 右键项目→选择“属性”→切换到“设置”标签页;
- 找到
connectionStr项,重新配置:- 用LocalDB时,连接字符串需确保反斜杠转义:
Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\AppDatabase.mdf;Integrated Security=True;Connect Timeout=30; - 用本地SQL Server实例时,改为类似
Data Source=你的SQL实例名;Initial Catalog=数据库名;Integrated Security=True;Connect Timeout=30的格式;
- 用LocalDB时,连接字符串需确保反斜杠转义:
- 保存设置后,VS会自动更新Designer文件,确保属性get方法调用
base["connectionStr"]而非this["connectionStr"],避免递归。
验证连接有效性
配置完成后,可通过VS“服务器资源管理器”测试连接,确认连接字符串能正常访问目标数据库。
内容的提问来源于stack exchange,提问作者Rani Radcliff
相关产品推荐
相关产品推荐

