Click here to Skip to main content
15,885,365 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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

C#
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();
     }
    }
Posted
Comments
I.explore.code 19-Oct-12 5:52am    
Put a breakpoint at the start of the method and debug it using "F10" key to find out where is it failing and why! Also as a suggestion, use parameterised ADO.NET queries rather than appending the values as a string.
Miss Maheshwari 20-Oct-12 1:16am    
I have already done that...on checking the con object its showing open connection...but on checking cmd's connection state its showing closed connection please help me..

1 solution

check con.open() and con.close().....your are making mistake here..
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900