0

我在本地没有问题。但我在上传的网站中收到此错误:

你调用的对象是空的。

这个链接中,它说这是 ADO 的一个错误,但我没有在我的代码中使用 ADO。

这是我的代码:

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

我把上面的代码放在USING语句中,没有任何改变。

这是我的堆栈跟踪

NullReferenceException:对象引用未设置为对象的实例。]
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(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) +5563

这是BtnRegister_Click代码:

    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
}

谢谢你的帮助。

4

3 回答 3

2

connectionstring在打开之前设置第一个

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

或者

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
        }
    }
}
于 2012-10-13T08:07:10.620 回答
0

它应该是new SqlCommand(query, sc)

于 2012-10-13T08:12:55.240 回答
0

谢谢大家的帮助。发生此错误是因为 asession的值为 null 并且ToString()方法找不到任何要转换的数据。

于 2012-10-13T16:54:04.360 回答