C# 使用变量值更新sql中的列

C# 使用变量值更新sql中的列,c#,sql,C#,Sql,我试图通过使用包含列名的变量来更新表列,而不是写入列名。如何正确编写查询?我试过了 UPDATE Room SET ['"+Time+"']=0 where Day='"+Day+"' 此查询显示错误消息 无效的列名 尽管它与列名完全匹配。您可能正在寻找以下语法: string sql = $@"UPDATE Room SET [{Time}] = 0 -- Time contains field's name no need in '...'

我试图通过使用包含列名的变量来更新表列,而不是写入列名。如何正确编写查询?我试过了

UPDATE Room 
SET ['"+Time+"']=0 
where Day='"+Day+"'
此查询显示错误消息

无效的列名


尽管它与列名完全匹配。

您可能正在寻找以下语法:

  string sql = 
     $@"UPDATE Room
           SET [{Time}] = 0 -- Time contains field's name no need in '...'
         WHERE [Day] = '{Day}'";
但是,硬编码-
…'{Day}'…
是一种不好的做法,参数化是正确的方法:

编辑:旧C#版本不支持字符串插值(
$
在字符串之前,请参见下面的注释),另一种方法是格式化:


此查询显示语法错误什么错误?我想知道您试图对所有
'“+
执行的操作打印出完整的最终查询字符串,并检查其是否有意义。
[]中的引号字符和空格
引用列名的字符在我看来非常可疑。当然,整个想法在我看来很可疑,因为它散发出强烈的数据被错误建模为元数据的气味,即嵌入列名中。我试图利用时间值来更新coulmn,而不是直接写入表的列名。您应该退出并停止使用
.AddWithValue()
-这可能会导致意外的结果…@marc_s:谢谢!非常大。我编辑了我的过早回答。我可能无法解释我的问题。我正在尝试使用包含列名的变量来更新它,而不是直接编写列。可能吗?@Sadia Labonno:是的,你的问题很清楚:
Time
包含字段的名称(例如,
MyField
)。在我的回答中,我使用字符串插值将
Time
值插入字符串:
$@“…{Time}…”
将产生
”…MyField。。。“
。您的问题在于撇号-我们不会将字段名括在them@DmitryBychenko谢谢,我知道了,但您能解释一下为什么我的查询无法工作,尽管它在执行java项目时工作得很好。
  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();
  }
  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);