每次读取行时,我都需要更改数据库表中的列值。具体来说,在读取行之后,我必须设置列SENT = 1(默认情况下,在读取之前,值为0)。
我的代码是:
var sqlCommand = "SELECT * FROM detector_output WHERE SENT=0";
var Command = new MySqlCommand(sqlCommand, connection);
MySqlDataReader reader = Command.ExecuteReader();
while (reader.Read())
{
var ident = reader.GetString(0);
var SENSOR_TYPE = reader.GetString(1);
var MSG_NAME = reader.GetString(2);
var DATA_NAME = reader.GetString(3);
var VALUE = reader.GetString(4);
var TIMESTAMP = reader.GetString(5);
var connectionUP = new MySqlConnection(cs);
connectionUP.Open();
var sqlCommandUPDATE = "UPDATE detector_output SET SENT=1 WHERE ID=ident";
var CommandUpdate = new MySqlCommand(sqlCommandUPDATE, connectionUP);
CommandUpdate.ExecuteReader();
我遇到的错误是:
where子句中的未知列'ident'...
答案 0 :(得分:2)
您不能在查询中使用ident
作为变量。您将其定义为ID=ident
,这是您的提供商混淆的原因,并且它认为您实际尝试过滤ID
列值等于ident
的位置列值。
如果ident
是一个角色怎么办?然后,它将被定义为ID = 'ident'
,不是吗?
为它定义一个参数,然后添加它的值。
var sqlCommandUPDATE = "UPDATE detector_output SET SENT=1 WHERE ID = @ident";
var CommandUpdate = new MySqlCommand(sqlCommandUPDATE, connectionUP);
CommandUpdate.Parameters.AddWithValue("@ident", ident);
还可以使用using
statement来处置您的连接,命令和读者。