我正在尝试编写一个参数化的更新查询,以便将值插入到Sql Server Express数据库中。我写的查询是:
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "update tblposts set title=@ptitle, pdate=@pd,
content=@pcontent where pid=@p"
cmd.Parameters.AddWithValue("ptitle", txtTitle.Text)
cmd.Parameters.AddWithValue("pcontent", txtcontent.InnerText)
cmd.Parameters.AddWithValue("pd", DateTime.Now.ToString)
cmd.Parameters.AddWithValue("p", postid)
在运行cmd.ExecuteNonQuery
时,我将受影响的行数设置为1,但更改未反映在数据库中。
在使用Debug.Write
打印查询时,我得到的查询不是参数值,而是参数本身的名称(即@pcontent,@ title等)
这里有什么错误?
答案 0 :(得分:4)
在您AddWithValue
中,您需要在参数的前面加上 @ 符号,所以:
cmd.Parameters.AddWithValue("@ptitle", txtTitle.Text)
cmd.Parameters.AddWithValue("@pcontent", txtcontent.InnerText)
cmd.Parameters.AddWithValue("@pd", DateTime.Now.ToString)
cmd.Parameters.AddWithValue("@p", postid)
我猜测它正确执行但是where子句是空白的,所以可能更新一个空行。
无论如何,请尝试以上操作,它应该按预期更新。
编辑添加
CommandText
始终只有@value
,它不会将参数值替换为字符串。
您需要遍历cmd.Parameters
集合才能写出值。