案例:我正在尝试使用MySql.Data.MySqlClient在C#中执行查询,其中包含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());
}
希望你们能帮忙!
答案 0 :(得分:2)
Insert不能使用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 + "'";
答案 1 :(得分:1)
没有INSERT
和where子句。
看看这个问题: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 :(得分:0)
您无法在 insert 语句中使用 where ,因为insert语句用于向表中添加新行。您最好使用 update 语句。