我正在尝试从数据库中检索一个值,将其递增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属性。
答案 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语句。这允许您在异常的情况下关闭和处置这些对象。