积极答复者
Asp.net(C#)网站偶发性对象空,请问如何解决???

问题
-
具体情况如下:
我的网站首页是一个登陆系统,当用户输入正确的ID和密码、验证码之后,程序先从数据库中去验证该ID的密码,如果验证成功就跳转到主界面。
现在我遇到的情况是:
网站运行情况基本都不错,每天偶尔会出现一次查询数据库为空的情况,就是无法取得数据库的值,每当这个问题出现之后,所有的用户都不能登陆了。只能IISRESET,然后就又恢复了,基本上每天会出现1-2次。
具体获取的Exception如下:
System.NullReferenceException: 未将对象引用设置到对象的实例。
在 _Default.btn_login_Click(Object sender, ImageClickEventArgs e)
btn_login_Click函数如下:
protected void btn_login_Click(object sender, ImageClickEventArgs e)
{
try
{
lbl_err.Visible = false;
string str_YZ = Session["VdtCode"] == null ? "" : Session["VdtCode"].ToString();
if (InputValidator.IsSafeText(txt_username.Text.Trim()) && InputValidator.IsSafeText(txt_pwd.Text.Trim())) //验证输入的字符是否安全
{
if (txt_yzm.Text.Trim() != str_YZ)
{
lbl_err.Visible = true;
lbl_err.Text = "验证码错误";
txt_yzm.Text = "";
Session["VdtCode"] = "";
return;
}string merchant_username = txt_username.Text.Trim();
string merchant_pwd = JIAMI(txt_pwd.Text.Trim());
string str_sql = "select top 1 MERCHANT_MOBILE,MERCHANT_NAME,MERCHANT_LIMIT_AMOUNT,MERCHANT_EMAIL,MERCHANT_TYPE,PARENT_MERCHANT,QUDAO_CODE,MERCHANT_IS_INTERFACE from MERCHANT where 1=1 and USERNAME='" + merchant_username + "' and MERCHANT_PWD='" + merchant_pwd + "'";//查询语句
ViewState["sql"] = str_sql;
CDataBaseDeal obj_db = new CDataBaseDeal();
SqlDataReader dr = obj_db.GetDataReader_Query(str_sql);
if (dr.Read())//每次到这里就抛出异常为空
{
string m_mobile = dr.GetString(0);
string m_name = dr.GetString(1);
decimal m_amount = dr.GetDecimal(2);
string e_email = dr.GetString(3);
string m_type = dr.GetString(4);
string p_m_mobile = dr.GetString(5);
string qd_code = dr.GetString(6);
string isinterface = dr.GetString(7);//建立代理商信息类
CMerchant obj_merchant = new CMerchant(m_mobile, m_name, m_amount, e_email, m_type, p_m_mobile, qd_code, merchant_username, isinterface);
Session["MERCHANT"] = obj_merchant;
dr.Close();
Server.Execute("MainFrame.aspx");
}
else
{
lbl_err.Visible = true;
dr.Close();
txt_username.Text = "";
txt_pwd.Text = "";
txt_yzm.Text = "";
}
}
}
catch (Exception err)
{
logger.debug("ERR==>" + ViewState["sql"].ToString());
logger.debug(err.ToString());
}}
不知道有谁遇到和我相同的问题,有什么比较好的解决方案,这种问题本地真的调试不出来啊。。。