我想根据条件更新字段
如果年龄<25岁则等级= 10,否则等级= 20;
到目前为止,我已尝试过这些
cmd = new OleDbCommand("update workClass Set Class = 10 when " + ds.Tables["no"].Rows[i][1] + " < 25 else Set Class = 20 ", con);
cmd.ExecuteNonQuery();
第二
cmd = new OleDbCommand("update workClass Set Class = 10 where" + ds.Tables["no"].Rows[i][1] + " < 25 else Set Class = 20 ", con);
cmd.ExecuteNonQuery();
我收到此错误消息
注意ds.tables在第一次迭代中返回33,以便该位正常工作
当33&lt;时,查询表达式'10中的语法错误(缺少运算符)。 25 else Class = 20'。
答案 0 :(得分:1)
JET引擎中没有为Microsoft Access数据库提供支持的WHEN子句 你需要像这样使用IIF function
int[]
但是我建议你使用参数化查询来避免可能的解析错误和SQL注入
cmd = new OleDbCommand(@"update workClass Set Class = IIF(" +
ds.Tables["no"].Rows[i][1] + " < 25, 10, 20)", con);
答案 1 :(得分:1)
我有一种感觉,这就是你所追求的。
cmd = new OleDbCommand("UPDATE workClass SET [Class] = IIF([Age] < 25, 10, 20)", con);
cmd.ExecuteNonQuery();
但缺少的是描述符,因此您只能根据过滤器更新特定记录或记录集。编写您的查询时,每次执行时都会更新所有记录。要添加where
子句,请确保使用参数添加过滤器,不要使用字符串连接。
示例:
cmd = new OleDbCommand("UPDATE workClass SET [Class] = IIF([Age] < 25, 10, 20) WHERE [someId] = ?", con);
cmd.Parameters.Add("@someId", OleDbType.Integer).Value = yourIdValue;
cmd.ExecuteNonQuery();
请务必注意,参数是在Ms Access中排序的,而不是命名的。查询中遇到的第一个参数必须与参数集合中的第一个参数相对应。