正如标题所说,我正试图通过我的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),这很重要。
答案 0 :(得分:0)
相反,如果等于符号使用像这样的运算符
book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title like %'" + title + "'%";
或检查您在where子句中使用的数据库中的值。 我想这会对你有所帮助。
答案 1 :(得分:0)
ExecuteNonQuery()命令的返回值1并不意味着1行已更改,但是一行触发了该命令。如果您的数据库用户只具有读取权限,则该命令将在一行触发但不会执行。因此,请确保您的数据库用户具有写入权限。