如何使用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 + "'";

我在"大纲"中出错了,这是一个包含大段落的大数据。如果我从查询中调出"概要"部分,则一切正常。到底是什么问题。我该如何解决此问题?

如何使用c#从mysql表中更新段落

@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);