更新行返回1但不更改数据库中的实际行

时间:2017-05-23 07:05:16

标签: c# sql

正如标题所说,我正试图通过我的GUI更改数据库中书籍的评级。我将它从1改为5。当我使用断点时,我看到查询正确地转换为它应该是什么(我认为),我没有错误。但它并没有改变数据库中的实际行。

        public int ChangeRating(Book book, int rating, string title)
    {
        book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title = '" + title + "'";

        return SqlManager.RunNonQuery(book);
    }

之后它转到我的SqlManager。

       public static int RunNonQuery<T>(T value) where T : IIsQueriable, new()
    {
        using (SqlConnection con = new SqlConnection(cs)) //connectie wordt aangemaakt
        {
            using (SqlCommand cmd = con.CreateCommand()) //maakt een command aan
            {
                cmd.CommandText = value.Query; //de waarde van Query wordt de command
                return TryExecuteNonQuery<T>(cmd);
            }
        }
    }

    private static int TryExecuteNonQuery<T>(SqlCommand cmd) where T : IIsQueriable, new()
    {
        int result;

        try
        {
            cmd.Connection.Open();
            cmd.Prepare();
            result = cmd.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
            throw;
        }
        finally
        {
            cmd.Connection.Close();
        }
        MessageBox.Show(result.ToString());
        return result;
    }

在数据库中。评级是一个int,标题是Nvarchar(MAX),这很重要。

2 个答案:

答案 0 :(得分:0)

相反,如果等于符号使用像这样的运算符

book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title like %'" + title + "'%"; 

或检查您在where子句中使用的数据库中的值。 我想这会对你有所帮助。

答案 1 :(得分:0)

ExecuteNonQuery()命令的返回值1并不意味着1行已更改,但是一行触发了该命令。如果您的数据库用户只具有读取权限,则该命令将在一行触发但不会执行。因此,请确保您的数据库用户具有写入权限。