C# 更新行返回1,但不返回';t更改数据库中的实际行
正如标题所说,我正试图通过GUI更改数据库中某本书的评级。例如,我将它从1改为5。当我使用断点时,我看到查询正确地转换为它应该是什么(我认为),并且没有出现错误。但它不会更改数据库中的实际行C# 更新行返回1,但不返回';t更改数据库中的实际行,c#,sql,C#,Sql,正如标题所说,我正试图通过GUI更改数据库中某本书的评级。例如,我将它从1改为5。当我使用断点时,我看到查询正确地转换为它应该是什么(我认为),并且没有出现错误。但它不会更改数据库中的实际行 public int ChangeRating(Book book, int rating, string title) { book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title = '"
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;
}
public static int RunNonQuery(T值),其中T:iiskriable,new()
{
使用(SqlConnection con=newsqlconnection(cs))//connectie wordt aangemaakt
{
使用(SqlCommand cmd=con.CreateCommand())//maakt een command aan
{
cmd.CommandText=value.Query;//de waarde van Query wordt de命令
返回tryexecutenonquiry(cmd);
}
}
}
私有静态int-TryExecuteNonQuery(SqlCommand cmd),其中T:iiskriable,new()
{
int结果;
尝试
{
cmd.Connection.Open();
cmd.Prepare();
结果=cmd.ExecuteNonQuery();
}
捕获(例外e)
{
MessageBox.Show(e.Message);
投掷;
}
最后
{
cmd.Connection.Close();
}
Show(result.ToString());
返回结果;
}
在数据库中。评级是一个整数,标题是一个Nvarchar(MAX),以防出现问题。如果等于符号,则使用如下运算符
book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title like %'" + title + "'%";
或者检查您在where子句中使用的数据库中的值。
我想这对你有帮助 ExecuteNonQuery()命令的返回值1并不意味着有1行已更改,而是有一行触发了该命令。如果数据库用户只有读取权限,则在一行触发该命令,但不执行该命令。因此,请确保您的数据库用户具有写入权限。,提供您的示例数据。您是否100%确定您的连接字符串(
cs
)指向正确的数据库?此代码高度暴露于Sql注入。我特别建议您不要构建自己的不支持参数化查询的数据库框架这似乎是DataDirectory的副作用。看看这个答案,这个连接确实有效,因为我已经有了其他方法,可以很好地工作。也只是为了上学。好吧,我会通读一遍我有写作许可证