对象空引用和开放连接要求 [英] Object null reference and open connection requires
本文介绍了对象空引用和开放连接要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我写这段代码,但有时它会在行 tr.Rollback();上抛出空引用异常,有时它会抛出连接关闭异常...需要在行 cmd上打开连接.ExecuteNonQuery(); 请告诉我问题出在哪里
I write this code but sometime it is throwing null reference exception on line tr.Rollback();and sometimes it throws connection closed exception...requires an open connection on line cmd.ExecuteNonQuery(); please tell me where is the problem
protected void register()
{
string epin = generatepin();
//tablename = "tbl_member"; columnname = "mem_id";
mid = getmaxmemid("tbl_member", "mem_id");
levelid = getmaxmemid("tbl_level", "level_id");
// string query = "insert into tbl_member(mname,mem_pwd,madd,pan,bank_name,ac_num,ac_holder,ifsc,referal_id,epin)"+
// "values('"+txtname.Text.Trim()+"','"+txtpwd.Text.Trim()+"','"+txtadd.Text.Trim()+"','"+txtpan.Text.Trim()+"','"+txtbname.Text.Trim()+"','"+txtac.Text.Trim()+"','"+txtholder.Text.Trim()+"','"+txtifsc.Text.Trim()+"')";
con = new SqlConnection(sqlcon);
con.Open();
tr = con.BeginTransaction();
cmd = new SqlCommand();
cmd.Connection = con;
//con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "add_member";
cmd.Parameters.Add("@mem_id", SqlDbType.Int).Value = mid;
cmd.Parameters.Add("@userid", SqlDbType.NVarChar).Value = txtuser.Text.Trim();
cmd.Parameters.Add("@mem_pwd", SqlDbType.NVarChar).Value = txtpwd.Text.Trim();
cmd.Parameters.Add("@mname", SqlDbType.NVarChar).Value = txtname.Text.Trim();
cmd.Parameters.Add("@madd", SqlDbType.NVarChar).Value = txtadd.Text.Trim();
cmd.Parameters.Add("@pan", SqlDbType.NVarChar).Value = txtpan.Text.Trim();
cmd.Parameters.Add("@bank_name", SqlDbType.NVarChar).Value = txtbname.Text.Trim();
cmd.Parameters.Add("@ac_num", SqlDbType.NVarChar).Value = txtac.Text.Trim();
cmd.Parameters.Add("@ac_holder", SqlDbType.NVarChar).Value = txtholder.Text.Trim();
cmd.Parameters.Add("@ifsc", SqlDbType.NVarChar).Value = txtifsc.Text.Trim();
cmd.Parameters.Add("@referal_id", SqlDbType.NVarChar).Value = txtref.Text.Trim();
cmd.Parameters.Add("@epin", SqlDbType.NVarChar).Value = epin;
cmd.Parameters.Add("@plan_id", SqlDbType.Int).Value = Convert.ToInt16(ddlplan.SelectedValue);
//int ref_id = Convert.ToInt32(txtref.Text.Trim());
try
{
int check = check_referal_existance();
if (check == 1)
{
int ref_id = getminimumid("tbl_member", "mem_id");
setrefid:
string query = "select mem_id from tbl_level where referal_id=" + ref_id;
cmdlev = new SqlCommand(query, con);
con.Open();
records_aftcd = 0;
SqlDataReader dr = cmdlev.ExecuteReader(CommandBehavior.CloseConnection);
if (dr.HasRows)
{
while (dr.Read())
{
records_aftcd = records_aftcd + 1;
}
//records_aftcd = dr.RecordsAffected;
if (records_aftcd >= 2) // (dr.Read())
{
ref_id = ref_id + 1;
con.Close();
goto setrefid;
}
else
{
//isertnew_referal:
dr.Close();
//con.Close();
string insert_query = "insert into tbl_level(level_id,mem_id,referal_id) values(" + levelid + "," + mid + "," + ref_id + ")";
cmd_setlevel = new SqlCommand(insert_query, con);
// con.Open();
cmd.Transaction = tr;
cmd_setlevel.Transaction = tr;
cmd_setlevel.ExecuteNonQuery();
cmd.ExecuteNonQuery();
tr.Commit();
erdiv.InnerHtml = "Member Has Been Successfully Registered";
}
}
else
{
//isertnew_referal:
dr.Close();
//con.Close();
string insert_query = "insert into tbl_level(level_id,mem_id,referal_id) values(" + levelid + "," + mid + "," + ref_id + ")";
cmd_setlevel = new SqlCommand(insert_query, con);
// con.Open();
tr = con.BeginTransaction();
cmd.Transaction = tr;
cmd_setlevel.Transaction = tr;
cmd_setlevel.ExecuteNonQuery();
// con.Open();
cmd.ExecuteNonQuery();
tr.Commit();
erdiv.InnerHtml = "Member Has Been Successfully Registered";
}
}
else
{
erdiv.InnerHtml = "Referal not exists!";
}
}
catch (Exception ex)
{
tr.Rollback();
throw ex;
}
finally
{
con.Close();
con.Dispose();
// cmd.Dispose();
}
}
推荐答案
检查con.open()和con.close().....您在这里犯了错误..
check con.open() and con.close().....your are making mistake here..
这篇关于对象空引用和开放连接要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文