简体   繁体   中英

ASP.NET Object reference not set to an instance of an object

I have no problem in local. But I get this error in uploaded website:

Object reference not set to an instance of an object.

In this link it says this is a bug with ADO but I dont use ADO in my code.

Here is my code:

        SqlConnection sc = new SqlConnection();
        sc.ConnectionString = MyConnectionString;
        sc.Open();
        SqlCommand scm = new SqlCommand(INSERT COMMAND);
        scm.Connection = sc;
        scm.ExecuteNonQuery();
        sc.Close();

I put my above code in USING statements and nothing changed.

Here is my stack trace

NullReferenceException: Object reference not set to an instance of an object.]
Register.BtnRegister_Click(Object sender, ImageClickEventArgs e) +601
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +115
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +120

System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

And here is BtnRegister_Click code:

    protected void BtnRegister_Click(object sender, ImageClickEventArgs e)
    {
    if (TxtName.Text == "" || TxtFamily.Text == "" || txtNationalCode.Text == "" || TxtIdNumber.Text == "" || txtMobile.Text == "" || TxtEmail.Text == "" || txtAddress.Text == "" || TxtSecurityCode.Text == "")
    {
        LblMsg.Text = "You should fill all fields";
        return;
    }

    if (txtNationalCode.Text.Length != 10)
    {
        LblMsg.Text = "National code must have 10 digits";
        return;
    }

    if (txtMobile.Text.Length != 11)
    {
        LblMsg.Text = "Mobile number should have 11 digits";
        return;
    }

    if (T_Paticipant.GetDataByNationalCode(txtNationalCode.Text).Rows.Count > 0)
    {
        LblMsg.Text = "This national code used before";
        return;
    }

    if (T_Paticipant.GetDataByEmail(TxtEmail.Text).Rows.Count > 0)
    {
        LblMsg.Text = "This email used before";
        return;
    }

    LblMessage.Text = "Are you sure to register?";
    LblFlag.Text = "0";


    //captcha

    if (this.Session["CaptchaImageText"].ToString().ToLower() == TxtSecurityCode.Text.ToLower())
    {
        Page.ClientScript.RegisterStartupScript(this.GetType(), "showMessage()", "<script>ShowMessage() </script>");
    }
    else
    {
        LblMsg.ForeColor = System.Drawing.Color.Red;
        LblMsg.Text = "Security code is wrong";
    }
    //end captcha
}

Thank you for help.

set the connectionstring first before opening

    SqlConnection sc = new SqlConnection();
    sc.ConnectionString = MyConnectionString
    SqlCommand scm = new SqlCommand(INSERT COMMAND);
    scm.Connection = sc;           // missing this.
    sc.Open();
    scm.ExecuteNonQuery();
    sc.Close();

or

using (SqlConnection conn = new SqlConnection("connectionstringhere"))
{
    using (SqlCommand comm = new SqlCommand())
    {
        comm.Connection = conn;
        comm.CommandText = "your query";
        comm.CommandType = CommandType.Text;
        // comm.Parameters.AddWithValue("@paramName","value"); // if you have parameters
        try
        {
            conn.Open();
            comm.ExecuteNonQuery();
        }
        catch(SqlException ex)
        {
            // error here
            // ex.Message.Tostring  // holds the error message
        }
    }
}

它应该是new SqlCommand(query, sc)

Thank you everyone for help. This error occurred because value of a session was null and ToString() method couldn't find any data to convert.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM