You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接.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自动生成的文件,手动修改会破坏默认逻辑。若已修改:

    1. 若使用版本控制,直接从版本库拉取该文件的原始版本;
    2. 若无版本控制,删除该文件后右键项目选择“生成”,VS会自动重新生成正确的代码。
  • 通过项目设置界面重新配置连接字符串

    1. 右键项目→选择“属性”→切换到“设置”标签页;
    2. 找到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的格式;
    3. 保存设置后,VS会自动更新Designer文件,确保属性get方法调用base["connectionStr"]而非this["connectionStr"],避免递归。
  • 验证连接有效性
    配置完成后,可通过VS“服务器资源管理器”测试连接,确认连接字符串能正常访问目标数据库。

内容的提问来源于stack exchange,提问作者Rani Radcliff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:11:31