用VB实现ASP.net中Sql server的参数化更新查询

用VB实现ASP.net中Sql server的参数化更新查询,asp.net,vb.net,Asp.net,Vb.net,我正在尝试编写一个参数化更新查询,以将值插入SQLServerExpress数据库。我写的问题是: 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

我正在尝试编写一个参数化更新查询,以将值插入SQLServerExpress数据库。我写的问题是:

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等)


这里可能有什么错误?

在您的
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
中始终只有
@值
,它不会将参数值替换到字符串中


您需要在
cmd.Parameters
集合中循环以写出值。

在您的
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
中始终只有
@值
,它不会将参数值替换到字符串中


您需要在
cmd.Parameters
集合中循环以写出值。

您使用的是与应用程序相同的数据库吗?您是否在回滚的事务中运行此操作?我没有使用事务。只有此应用程序正在使用数据库此表上是否有任何更新触发器?是否使用与应用程序相同的数据库?您是否在回滚的事务中运行此操作?我没有使用事务。只有此应用程序正在使用数据库此表上是否有任何更新触发器?添加“@”符号不会更改效果。我还要补充一点,我已经尝试了插入和选择查询的参数化查询,它可以工作,但不适用于更新查询。您是否使用实际值进行了
调试?i、 e.
Debug.Write(postid)
?我得到了postid的预期值,但txtitle.Text和txtContent.innerText的值非常旧。我想问题在于一个非常微妙的错误。我在页面加载事件中从数据库中读取值,然后单击一个按钮,更新这些值。我没有检查iPostBack的状况。所以答案是正确的。谢谢:)太好了,很高兴听到。尽管如此,讨厌的
IsPostBack
循环始终是一个难题!很高兴它已排序。添加“@”符号不会改变效果。我还要补充一点,我已经尝试了插入和选择查询的参数化查询,它可以工作,但不适用于更新查询。您是否使用实际值进行了
调试?i、 e.
Debug.Write(postid)
?我得到了postid的预期值,但txtitle.Text和txtContent.innerText的值非常旧。我想问题在于一个非常微妙的错误。我在页面加载事件中从数据库中读取值,然后单击一个按钮,更新这些值。我没有检查iPostBack的状况。所以答案是正确的。谢谢:)太好了,很高兴听到。尽管如此,讨厌的
IsPostBack
循环始终是一个难题!很高兴分类了。