none
如何处理“类型初始值设定项引发异常”? RRS feed

  • 问题

  • 大家好。

    我采用三层架构方式编写了一个WebService,在数据访问层(项目名称为WebServiceDAL)封装了一个自定义类SqlDbManipulation,如下:

        public class SqlDbManipulation
        {
            private static string connString = 
                ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
           
            public static string ConnectionString
            {
                get { return connString; }
                set { connString = value; }
            }
    
            public static DataTable ExecuteDataTable(string commandText,
                CommandType commandType, List<SqlParameter> parameters)
            {
                DataTable data = new DataTable();//实例化DataTable,用于装载查询结果集
                //try {
                //} catch (Exception ex) {
                //    Debug.Assert(false, ex.StackTrace + ex.Message);
                //} finally {
                //}
                using (SqlConnection connection = new SqlConnection(connString))
                {
                    using (SqlCommand command = new SqlCommand(commandText, connection))
                    {
                        command.CommandType = commandType;//设置command的CommandType为指定的CommandType
                        //如果同时传入了参数,则添加这些参数
                        if (parameters != null)
                        {
                            foreach (SqlParameter parameter in parameters)
                            {
                                command.Parameters.Add(parameter);
                            }
                        }
                        //通过包含查询SQL的SqlCommand实例来实例化SqlDataAdapter
                        SqlDataAdapter adapter = new SqlDataAdapter(command);
    
                        adapter.Fill(data);//填充DataTable
                    }
                }
                return data;
            }
    
            public static DataTable ExecuteDataTable(string commandText)
            {
                return ExecuteDataTable(commandText, CommandType.Text, null);
            }
    
            public static DataTable ExecuteDataTable(string commandText, CommandType commandType)
            {
                return ExecuteDataTable(commandText, commandType, null);
            }
       }

    然后再WebServiceDAL项目中添加一个配置文件App.Config,用于指定连接数据库,App.config内容如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="ConnectionString"      
          connectionString="Data Source=.\sqlexpress;Initial Catalog=SuzhouQiaoBlank;Integrated Security=True"
          providerName="System.Data.SqlClient" />
        </connectionStrings>
    </configuration>

    然后仍然在数据访问层调用封装的函数:

                DataTable data = new DataTable();
                try
                {
                    data = SqlDbManipulation.ExecuteDataTable(SQLStatement);
                }
                catch (Exception ex)
                {
                    Debug.Assert(false, ex.StackTrace + ex.Message);
                }
     

    然后从业务逻辑层调用上述代码,在程序调试的时候,按F11时进行单步调试,执行到

    data = SqlDbManipulation.ExecuteDataTable(SQLStatement);

    这行代码时,不会进入到函数ExecuteDataTable,而是直接跳到catch语句块,接着就出现了“类型初始值设定项引发异常”。如下图所示:

    这是什么原因啊?第一次遇到这样的问题,不知怎么处理啊。

    2014年11月6日 9:58

答案

  • Hello waterharbin,

    请尝试将DALSqlDbManipulation类里的方法和熟悉不要写成静态的,通过实例应用的方式,看能不能调试到ExecuteDataTable方法内部。

    对于这个类型初始值设定项引发异常””,有很多种出现原因,你可以参照下这篇文章,里面列举了三种引发的原因,或许能帮到你:
    http://www.cnblogs.com/bluecountry/archive/2009/02/15/1390936.html

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年11月12日 9:12
    版主