对象空引用和开放连接要求 [英] Object null reference and open connection requires

查看:57
本文介绍了对象空引用和开放连接要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写这段代码,但有时它会在行 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆