【问题标题】:Insert into query with where clause使用 where 子句插入查询
【发布时间】:2017-10-02 10:47:49
【问题描述】:

案例:我正在尝试在 C# 中使用 MySql.Data.MySqlClient 执行一个查询,其中包含 INSERT INTO,我收到一个错误(见下文):

数据库表:

我想要实现的目标:我想插入一条新记录:“value_id(Auto Increment)”、“machine_id”、“tag_name”、“int_value”、“real_value”和“bool_value”;

我有以下代码:

*检索机器ID

private void getMachineID()
{
    string connStr = "";  
    string ipAdressID =  "'" + machineIP + "'";
    string basicQueryID = "SELECT machine_id FROM machine WHERE machine.machine_ip LIKE ";
    string totalQueryID = basicQueryID + ipAdressID;

    //Create connection
    MySqlConnection conn = new MySqlConnection(connStr);
    //Query command
    MySqlCommand cmd = conn.CreateCommand();
    //Assign string to query
    cmd.CommandText = totalQueryID;
    //Open connection
    conn.Open();
    //Get result ID from machine where IP adress = machineIP and write to machineID variable.
    machineID = (int)(cmd.ExecuteScalar());
}

要插入记录的代码:

try
{
    string connStr = "";
    MySqlConnection conn = new MySqlConnection(connStr);
    MySqlCommand cmd = conn.CreateCommand();

    cmd.CommandText = "INSERT INTO waardes(machine_id, tag_name, int_value, real_value, bool_value) VALUES(@machineID, @tagName, @intValue, @doubleValue, @boolValue)";

    cmd.Parameters.AddWithValue("@tagName", tagName);
    cmd.Parameters.AddWithValue("@intValue", intValue);
    cmd.Parameters.AddWithValue("@doubleValue", doubleValue);
    cmd.Parameters.AddWithValue("@boolValue", boolValue);
    cmd.Parameters.AddWithValue("@machineID", machineID);
    conn.Open();
    cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

希望大家帮忙!

【问题讨论】:

  • 那么问题出在哪里?为什么需要Where 来代替insert?你的意思是更新吗?
  • MySQL Insert Where query的可能重复
  • 是INSERT INTO .... FROM ... WHERE x = z吗?
  • AFAIK 如果要使用条件更新现有记录,则需要使用UPDATE 查询,即WHERE 子句。
  • @RahulHendawe ahhh .. OP 想要更新记录 o_O

标签: c# mysql


【解决方案1】:

没有带有 where 子句的 INSERT。

看看这个问题:How to insert with where clause

也许,您可以在您的应用程序中创建一个IF,以在执行INSERT 语句之前验证您的参数。

根据您的查询,我认为您需要UPDATE:

UPDATE waardes SET tag_name = @tagName,
  int_value = @intValue, real_value = @doubleValue,
  bool_value = @boolValue WHERE machine.machine_id LIKE %1%

这是你需要的吗?

【讨论】:

    【解决方案2】:

    您不能在 insert 语句中使用 where,因为 insert 语句用于向表中添加新行。你最好使用 update 语句。

    【讨论】:

      【解决方案3】:

      插入时不能使用 Where 子句。但是,当您使用 Insert Into 时,您可以使用 Where。在您的陈述中,我想您在 Where 子句之前缺少 Select From。

      考虑这个例子:

      INSERT INTO tableNameDestination
      SELECT feild(s),... 
      FROM tableNameSource
      WHERE Condition
      

      在你的情况下:

      INSERT INTO waardes(tag_name, int_value, real_value, bool_value) VALUES(@tagName, @intValue, @doubleValue, @boolValue) Select field1, field2, field3, field4 from machine WHERE machine.machine_id LIKE " + "'" + machineID + "'";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多