简单更新查询不更新。没有例外,没有错误。根本不值一提

时间:2011-07-21 15:21:33

标签: c# .net asp.net sql razor

我正在尝试进行一次非常简单的更新,但事实证明这非常困难。我不知道发生了什么事;它只是不更新​​:

这是我的更新代码:

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语句中并输出任何异常,但是从来没有任何例外可以捕获。

但仍然没有更新。

我做错了什么?我在这里做错了吗?

4 个答案:

答案 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子句中传递的CategoryNameImagePath的值实际上与数据库中的某些记录匹配。

答案 2 :(得分:1)

目标表上是否有“代替”触发器?在SQL Server中,如果遇到错误,您将无法在更新中听到它。

答案 3 :(得分:0)

检查WHERE子句条件。我认为可以改进:

  • 尝试为您的类别表提供唯一的数字(自动编号)/ GUID ID。
  • 在更新中使用此ID,而不是使用文本列(categoryName,imagePath)。