Простой запрос на обновление НЕ обновляется.Без исключений, без ошибок.Совсем ничего - PullRequest
1 голос
/ 21 июля 2011

Я пытаюсь сделать очень простое обновление, но оказывается очень сложным. Я не знаю, что происходит; он просто не обновляется:

Вот мой код обновления:

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 ]

5 голосов
/ 21 июля 2011

обновление может успешно обновить 0 строк. Я бы трижды проверил ваше предложение WHERE, чтобы увидеть, действительно ли оно пытается сопоставить существующие строки.

4 голосов
/ 21 июля 2011

Ваш код уязвим для внедрения SQL.Попробуйте исправить это следующим образом:

database.Execute(
    "UPDATE Categories " +
    "SET PositionInPage = @0, InPage = @1 " + 
    "WHERE CategoryName = @2 AND ImagePath = @3", 

    PositionInPage, 
    InPage, 
    CategoryName, 
    ImagePath
);

Теперь, когда вы исправили уязвимость, убедитесь, что значения CategoryName и ImagePath, которые вы передаете в предложении WHERE, действительно соответствуют некоторым записям в базе данных.

1 голос
/ 21 июля 2011

Есть ли у вас триггер "вместо" на целевой таблице?В SQL Server, если они обнаружат ошибку, вы не услышите об этом, в вашем обновлении не произойдет.

0 голосов
/ 27 июля 2011

Проверьте условие предложения WHERE. Я думаю, что это может быть улучшено:

  • Попробуйте использовать уникальный числовой (автоматический номер) / GUID ID для таблицы вашей категории.
  • Используйте этот идентификатор в своем обновлении вместо использования текстовых столбцов (categoryName, imagePath).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...