2017-10-02 4 views
-4

ケースどこでクエリに挿入します。

Error

:私は(下記参照)がエラーを取得しています、INSERT INTOをcontaints MySql.Data.MySqlClient、とC#でクエリを実行しようとしています

データベーステーブル:

達成しようとして何イム

Database table

:私は新しいレコードに挿入したい: "VALUE_ID(自動インクリメント)"、 "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()); 
} 

は君たちが役立つことを願って!

+2

だから問題は何ですか?そしてなぜ 'insert'のために' Where'が必要なのでしょうか?あなたは更新を意味しますか? –

+3

[MySQL Insert Where query]の複製の可能性(https://stackoverflow.com/questions/485039/mysql-insert-where-query) – Equalsk

+0

これはINSERT INTO .... FROM ... WHERE x = zですか? '? – rmjoia

答えて

1

where句にはINSERTはありません。

はこの質問を見てみましょう:How to insert with where clause

はたぶん、あなたはINSERTステートメントを実行する前に、あなたのパラメータを確認するためにアプリ内IFを作成することができます。

クエリに基づいて、私はあなたがUPDATEが必要と考えている:

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

は何が必要このですか?

+0

質問を更新しました。 – NielsStenden

0

InsertにWhere句を使用することはできません。ただし、[挿入]を使用している場合は、[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 + "'"; 
+0

質問を更新しました。 – NielsStenden

0

あなたがinsert文がに新しい行を追加するために使用されているためは、文を挿入しを使用することはできません表。 更新の文を使用する方がよいでしょう。

+0

質問を更新しました。 – NielsStenden