1

我正在尝试编写参数化更新查询以将值插入 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 等)

这里有什么错误?

4

1 回答 1

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集合以写出值。

于 2012-11-19T11:53:53.760 回答