从ASP.Net更新数据库获取错误“连接属性尚未初始化”

时间:2018-01-07 14:11:24

标签: asp.net sql-server

我正在尝试从数据库中检索一个值,将其递增1,然后使用此新值更新数据库。

到目前为止,我的代码是

protected void Button1_Click(object sender, EventArgs e)
{
        string content = Request.QueryString["ContentID"];
        string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["dbmb17adtConnectionString"].ConnectionString;

        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();

        SqlCommand cmd = new SqlCommand("Select likeCount from tbl_Post where tbl_Post.Id="+Convert.ToInt16(content) , conn);

        SqlDataReader dr = cmd.ExecuteReader();

        dr.Read();
        int oldVal = Convert.ToInt16(dr["likeCount"]);
        int newVal = oldVal + 1;

        SqlCommand insert1 = new SqlCommand("update tbl_Post set 
        likeCount="+newVal+ "where tbl_Post.Id=" + content);

        insert1.ExecuteNonQuery();

        conn.Close();
}

我在第insert1.ExecuteNonQuery

上收到错误消息
  

ExecuteNonQuery:尚未初始化Connection属性。

1 个答案:

答案 0 :(得分:1)

您的错误原因是第二个命令中缺少连接。您可以像在第一个命令中那样将它添加到SqlCommand构造函数中,同样在第二个命令的查询文本中也缺少空格。

如果您使用以下代码中所述的参数,则可以避免这些错误和名为Sql Injection的更严重错误

至少但可能最重要的是,您不需要两个命令来增加likeCount字段。您可以编写一个命令

protected void Button1_Click(object sender, EventArgs e)
{
    string content = Request.QueryString["ContentID"];
    string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["dbmb17adtConnectionString"].ConnectionString;

    string updateText = @"update tbl_Post 
                          set likeCount=likeCount + 1 
                          where tbl_Post.Id=@id";

    using(SqlConnection conn = new SqlConnection(connStr))
    using(SqlCommand cmd = new SqlCommand(updateText, conn);
    {
        conn.Open();
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt16(content);
        cmd.ExecuteNonQuery();
    }
}

还要注意在一次性对象(如连接和命令)周围是否存在using语句。这允许您在异常的情况下关闭和处置这些对象。