用于更新表中行的正确sql是什么?

时间:2017-03-29 19:36:12

标签: c# mysql sql

我可以使用Insert MySQLC#数据导入Update。但是,它不喜欢我的sql keyautoincrementPrimary Key public int UpdatetData(int key, System.DateTime ts, string user) { string sql = @"update parameters (DateTime, User) values (@timestamp, @user) where Key = @key"; try { using (MySqlCommand cmd = new MySqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@key", key); cmd.Parameters.AddWithValue("@timestamp", ts); cmd.Parameters.AddWithValue("@user", user); ... return cmd.ExecuteNonQuery(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); return -1; } }

这是我正在使用的代码。 什么是正确的Update sql和相应的C#语句来执行它?

public enum MyEnum : byte
{
    One = 1,
    Two = 2
}

4 个答案:

答案 0 :(得分:2)

UPDATE语句的正确语法是:

Update  `Parameters`
Set     `DateTime` = @TimeStamp,
        `User` = @User
Where   `Key` = @Key

您需要对C#进行的唯一更改是sql变量声明:

string sql = 
@"
    Update  `Parameters`
    Set     `DateTime` = @TimeStamp,
            `User` = @User
    Where   `Key` = @Key
";

答案 1 :(得分:2)

正确的语法是:

update parameters (DateTime, User) 
    set DateTime = @timestamp, 
        User = @user
where Key = @key;

您的语法有点像insert

您应该小心列名。有些是SQL中的关键字,可能会被保留(取决于您的数据库)。您需要使用反引号,双引号或方括号来转义它们,具体取决于您的数据库。

答案 2 :(得分:2)

您的UPDATE语句的语法已关闭,因为您需要专门设置每个列及其新值:

string sql = @"UPDATE parameters 
                  SET DateTime = @timestamp,
                      User = @user
                WHERE Key = @key";

如果您需要更通用的格式作为参考,可以使用以下内容:

string sql = @"UPDATE [Table]
                  SET [Column] = [Value],
                      [OtherColumn] = [OtherValue]
                WHERE [Condition]";

示例

完整的示例以及连接(我之前未定义)可能如下所示:

public int UpdatetData(int key, System.DateTime ts, string user)
{
     // Build parameterized query (with escaped DateTime)
     var sql = @"UPDATE parameters 
                    SET [DateTime] = @timestamp,
                        User = @user
                  WHERE Key = @key";
     try
     {
          using(var connection = new MySqlConnection("{your-connection-string}"))
          {
               connection.Open();
               using (var command = new MySqlCommand(sql, connection))
               {

                    command.Parameters.AddWithValue("@key", key);
                    command.Parameters.AddWithValue("@timestamp", ts);
                    command.Parameters.AddWithValue("@user", user);
                    return command.ExecuteNonQuery();
               }
          }
    }
    catch (Exception ex)
    {
          Console.WriteLine(ex.ToString());
          return -1;
    }
}

答案 3 :(得分:1)

您可以使用此语法,您的语法是插入和更新语句的混合。

string sql = @"update `parameters` 
              set `DateTime` = @timestamp ,
                  `User` = @user 
              where `Key` = @key";