日期:2014-05-17  浏览次数:21147 次

C# DAL.SQLHelper的类型初始值设定项引发异常
C#配置文件
<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add connectionString="strCon" name="Data Source=SQL2008R2;Initial Catalog=HotelWebDB;User ID=sa;Password=mima"/>
  </connectionStrings>
</configuration>

读取配置文件代码
  private static string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["strCon"].ToString();

运行就报DAL.SQLHelper的类型初始值设定项引发异常,谁遇到过解决的

------解决方案--------------------
<connectionStrings>
    <add name="ConnectionString" connectionString="Server=.;Database=Sample;Uid=sa;Pwd=123;Max Pool Size=512;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
------解决方案--------------------
其中数据源改成Data Source=.
------解决方案--------------------
Data Source=SQL2008R2 改成 Data Source=.SQL2008R2 试试
------解决方案--------------------
可能你的“类型初始值设定项”不仅仅是这个给ConnectionString变量赋值的代码,还有别的。

看看你有没有其它的static变量声明中赋值的代码,以及有没有
static SQLHelper()
{
....
}

代码。

vs调试器无法调试(以及根本无法正确给你报告)“类型初始值设定”代码中的异常位置信息。因此你可以尽量避免“类型初始值设定”。例如写:
private static string _ConnectionString = null;

private static string ConnectionString
{
    get{
          if( _ConnectionString==null)
                 _ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["strCon"];
          return _ConnectionString;
    }
}
这样,vs就能给你详尽的地报告异常错误位置和堆栈,并且支持调试。因为这个赋值语句不再是“类型初始值设定”中运行的代码了!

当然你的这个赋值语句看起来不像是有问题,有问题的地方你可能根本没贴出来。

根据这个原理,逐一地自己修改其它“类型初始值设定项”代码并且立刻调试运行,直到运行时vs调试器能够准确地给你显示异常堆栈位置为止。



引用:
<connectionStrings>
    <add name="ConnectionString" connectionString="Server=.;Database=Sample;Uid=sa;Pwd=123;Max Pool Size=512;" providerName="System.Data.SqlClient"/>
  </connectionS……


lz的代码 System.Configuration.ConfigurationManager.ConnectionStrings["strCon"] 根本用不到 providerName。


引用:
最好能把异常原始信息贴出来,lz 这样描述不好确定问题在哪里

vs的调试期有点悲催,对于“类型初始设定项异常”根本没有更详细的异常信息抛出,而且也无法进入原代码去调试。