我正在尝试进行一次非常简单的更新,但事实证明这非常困难。我不知道发生了什么事;它只是不更新:
这是我的更新代码:
if(Request.QueryString["Action"] == "Update")
{
var InPage = Request["InPage"];
var PositionInPage = Request["PositionInPage"];
var CategoryName = Request["CategoryName"];
var ImagePath = Request["ImagePath"];
database.Execute("UPDATE Categories SET PositionInPage = " +
PositionInPage + ", InPage = " + InPage +
" WHERE CategoryName = '" + CategoryName +
"' AND ImagePath = '" + ImagePath + "'");
Response.Redirect("~/Fashion.cshtml");
}
这是表单代码:
<form method="post" action="Update.cshtml?Action=Update">
<input type="hidden" name="CategoryName" value="@Request.QueryString["CategoryName"]" />
<input type="hidden" name="ImagePath" value="@Request.QueryString["ImagePath"]" />
<label for="InPage">Move to Page</label>
<input type="text" name="InPage" value="@Request.QueryString["InPage"]" style="background-color: White;" />
<br/><br/>
<label for="PositionInPage">Position In Page</label>
<input type="text" name="PositionInPage" value="@Request.QueryString["PositionInPage"]" style="background-color: White;" />
<input type="submit" value="Submit" style="background-color: White;" />
</form>
我已经检查过,在首次访问页面时填充了QueryString,并在单击提交时提交了表单变量。
我甚至将数据库查询放在try catch语句中并输出任何异常,但是从来没有任何例外可以捕获。
但仍然没有更新。
我做错了什么?我在这里做错了吗?
答案 0 :(得分:5)
更新可以成功更新0行。我会三重检查你的WHERE子句,看它是否真的试图匹配现有的行。
答案 1 :(得分:4)
您的代码容易受到SQL注入攻击。尝试修复它:
database.Execute(
"UPDATE Categories " +
"SET PositionInPage = @0, InPage = @1 " +
"WHERE CategoryName = @2 AND ImagePath = @3",
PositionInPage,
InPage,
CategoryName,
ImagePath
);
现在您已修复漏洞,确保您在WHERE子句中传递的CategoryName
和ImagePath
的值实际上与数据库中的某些记录匹配。
答案 2 :(得分:1)
目标表上是否有“代替”触发器?在SQL Server中,如果遇到错误,您将无法在更新中听到它。
答案 3 :(得分:0)
检查WHERE子句条件。我认为可以改进: