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

从ASP.Net更新数据库获取错误“;连接属性尚未初始化";,asp.net,sql-server,Asp.net,Sql Server,我试图从数据库中检索一个值,将其递增1,然后用这个新值更新数据库 到目前为止,我的代码是 protected void Button1_Click(object sender, EventArgs e) { string content = Request.QueryString["ContentID"]; string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["d

我试图从数据库中检索一个值,将其递增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

ExecuteOnQuery:尚未初始化连接属性


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

如果使用下面代码中解释的参数,可以避免这些错误和调用的更严重的错误

至少但可能最重要的是,不需要两个命令来增加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语句。这允许您在出现异常时关闭并处理这些对象。

insert1.Connection=conn
您的代码还有一个问题,第二个命令中的
likeCount=
where
之间没有空格,因此这不起作用。第二个命令没有设置连接属性。可以像在第一个命令中那样将其添加到构造函数中。但这是一个小错误的一部分。请看一下什么是Sql注入,并尽快开始使用参数化查询。顺便说一下,第二个查询有一个语法错误。谢谢,它现在可以工作了您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-签出