如何使用c#从mysql表中更新段落
本文关键字:更新 段落 mysql 何使用 | 更新日期: 2023-09-27 18:23:34
我试图从mysql表中更新一段,但我得到了这样的错误
"您的SQL语法有错误;请查看与您的MySQL服务器版本相对应,以便使用正确的语法尼尔的第一个超级恶棍。"
我的mysql查询
cmd.CommandText = "UPDATE `moviemaster` SET `Runtime`='" + runtime + "',`DateMasterId`='" + dateid + "',`Trailer`='" + trailer + "',`Synopsis`='" + synopsis + "' WHERE `MovieMasterId`='" + movieid + "'";
我在"大纲"中出错了,这是一个包含大段落的大数据。如果我从查询中调出"概要"部分,则一切正常。到底是什么问题。我该如何解决此问题?
@SonerGönül:好的,很好。。那么请给我看一个参数化的例子查询
当然。我还想添加一些最佳实践。
- 使用
using
语句自动处理连接和命令 - 您不需要用``字符转义每一列。如果是数据库提供程序的保留关键字,则应仅转义。当然,最后,将它们更改为非保留单词会更好
- 不要使用
AddWithValue
方法。它有时可能会产生意想不到的结果。使用Add
方法重载来指定参数类型及其大小
using (var con = new SqlConnection(conString))
using(var cmd = con.CreateCommand())
{
cmd.CommandText = @"UPDATE moviemaster
SET Runtime = @runtime, DateMasterId = @dateid, Trailer = @trailer, Synopsis = @synopsis
WHERE MovieMasterId = @movieid";
cmd.Parameters.Add("@runtime", MySqlDbType.VarChar).Value = runtime; ;
cmd.Parameters.Add("@dateid", MySqlDbType.VarChar).Value = dateid;
cmd.Parameters.Add("@trailer", MySqlDbType.VarChar).Value = trailer;
cmd.Parameters.Add("@synopsis", MySqlDbType.VarChar).Value = synopsis;
cmd.Parameters.Add("@movieid", MySqlDbType.VarChar).Value = movieid;
// I assumed your column types are VarChar.
con.Open();
cmd.ExecuteNonQuery();
}
请避免使用内联查询。您的数据库可以接受SQL注入。请参阅此示例,了解使用SQL注入可以做些什么。
并改用参数化查询。这是从这里取的例子。这样,即使您的字符串有特殊字符,它也不会中断,并允许您根据参数插入/更新/选择。
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";
public bool read(string id)
{
level = -1;
MySqlCommand m = new MySqlCommand(readCommand);
m.Parameters.AddWithValue("@param_val_1", val1);
m.Parameters.AddWithValue("@param_val_2", val2);
level = Convert.ToInt32(m.ExecuteScalar());
return true;
}
最后,您的查询将变成
cmd.CommandText = "UPDATE `moviemaster` SET `Runtime`= @param1,`DateMasterId`= @dateid, `Trailer`= @trailer,`Synopsis`= @synopsis WHERE `MovieMasterId`= @movieid";
cmd.Parameters.AddWithValue("@param1", runtime);
cmd.Parameters.AddWithValue("@dateid", dateid);
cmd.Parameters.AddWithValue("@trailer", trailer);
cmd.Parameters.AddWithValue("@synopsis", synopsis);
cmd.Parameters.AddWithValue("@movieid", movieid);