在读取行

时间:2015-06-05 12:47:49

标签: c# mysql sql-update sqldatareader

每次读取行时,我都需要更改数据库表中的列值。具体来说,在读取行之后,我必须设置列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'...

1 个答案:

答案 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来处置您的连接,命令和读者。