C# 在视图时不能 用 “  SqlDataReader sdr = DBHelper.ExecReader(s, false);” 读取数据吗?为什么我 安装部署打包之后,运行时 总是提示 在视图读取 此部分有问题呢?求助。
报错信息如下:System.TypeInitializationException: “DAL.DBHelper”的类型初始值设定项引发异常。 ---> System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 DAL.DBHelper..cctor()
   --- 内部异常堆栈跟踪的结尾 ---
   在 DAL.DBHelper.ExecReader(String sql, Boolean isProc, SqlParameter[] param)
   在 DAL.V_breakdown_sendMail_DAL.Select()
   在 BLL.V_breakdown_sendMail_BLL.Select()
   在 EAM_AutoRun_.Login.AutoDetect_Tick(Object sender, EventArgs e)
   在 System.Windows.Forms.Timer.OnTick(EventArgs e)
   在 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

解决方案 »

  1.   

    DAL.DBHelper的构造函数你怎么写的。
      

  2.   

            /// <summary>
            /// 查询方法
            /// </summary>
            /// <param name="sql">数据库语句</param>
            /// <param name="isProc">存储过程</param>
            /// <param name="param">参数</param>
            /// <returns></returns>
            public static SqlDataReader ExecReader(string sql, bool isProc, params SqlParameter[] param)
            {
                SqlConnection conn = new SqlConnection(sqlConn);
                try
                {
                    if (conn.State != ConnectionState.Closed)
                    {
                        conn.Close();
                    }
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    if (isProc)
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                    }
                    foreach (SqlParameter sq in param)
                    {
                        cmd.Parameters.Add(sq);
                    }                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }另外查询时 获取值的函数为:
            public List<V_breakdown_sendMail> Select()
            {
                string s = "SELECT breakdownID,repairState,mailSendState,Department,operateTime,reportTime FROM [V_breakdown_sendMail] where mailSendState <> 2";            SqlDataReader sdr = DBHelper.ExecuteReader(s);            List<V_breakdown_sendMail> ls = new List<V_breakdown_sendMail>();
                V_breakdown_sendMail vbr = null;
                while (sdr.Read())
                {
                    vbr = new V_breakdown_sendMail();
                    vbr.breakdown.breakdownID = sdr["breakdownID"].ToString();
                    vbr.breakdown.repairState = sdr["repairState"].ToString();
                    vbr.breakdown.reportTime = sdr["reportTime"].ToString();
                    vbr.sendMail.mailSendState = int.Parse(sdr["mailSendState"].ToString());
                    vbr.sendMail.Department = sdr["Department"].ToString();
                    vbr.sendMail.operateTime = sdr["operateTime"].ToString();
                    ls.Add(vbr);
                }
                sdr.Close();
                return ls;
            }
      

  3.   

    曹版是问你DAL.DBHelper的构造函数是怎么写的
      

  4.   

    贴 DAL.DBHelper 类的代码 
      

  5.   

    > System.NullReferenceException: 未将对象引用设置到对象的实例。
       在 DAL.DBHelper..cctor()
    DAL.DBHelper.ExecReader(String sql, Boolean isProc, SqlParameter[] param)
      

  6.   

    楼上的是得瑟呢,还是得瑟呢。
    本是菜鸟,本是 向各位请教学习,没必要太得瑟。
    这块代码在web里是没有 问题,提示如此,也并非是 引用不正确。