从ASP.Net更新数据库获取错误“;连接属性尚未初始化";
我试图从数据库中检索一个值,将其递增1,然后用这个新值更新数据库 到目前为止,我的代码是从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
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注入-签出