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)
报错信息如下: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)
/// 查询方法
/// </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;
}
在 DAL.DBHelper..cctor()
DAL.DBHelper.ExecReader(String sql, Boolean isProc, SqlParameter[] param)
本是菜鸟,本是 向各位请教学习,没必要太得瑟。
这块代码在web里是没有 问题,提示如此,也并非是 引用不正确。