我正在尝试使用包含列名而不是编写列名的变量来更新表列。如何正确编写查询?我试过了
UPDATE Room
SET ['"+Time+"']=0
where Day='"+Day+"'
此查询显示错误
列名无效
虽然它与列名完全匹配。
答案 0 :(得分:1)
string sql =
$@"UPDATE Room
SET [{Time}] = 0 -- Time contains field's name no need in '...'
WHERE [Day] = '{Day}'";
但是,硬编码 - ...'{Day}'...
是不良做法,参数化是正确方式:
string sql =
$@"UPDATE Room
SET [{Time}] = 0
WHERE [Day] = @prm_Day";
// Providing that you use MS SQL - SqlCommand
using (SqlCommand q = new SqlCommand(sql, MyConnection)) {
//TODO: Check the actual RDMBS type - is it SqlDbType.DateTime?
q.Parameters.Add("@prm_Day", SqlDbType.DateTime).Value = Day;
q.ExecuteNonQuery();
}
修改:旧的C#版本不支持字符串插值(字符串前的$
,请参阅下面的评论),替代方案是格式化:
string sql = string.Format(
@"UPDATE Room
SET [{0}] = 0 -- Time contains field's name no need in '...'
WHERE [Day] = '{1}'", Time, Day);
和
string sql = string.Format(
@"UPDATE Room
SET [{0}] = 0
WHERE [Day] = @prm_Day", Time);