2017-08-15 47 views
-7

我想通過使用包含列名稱而不是寫入列名稱的變量來更新表列。如何正確地編寫查詢?我試過使用變量值更新sql中的列

UPDATE Room 
SET ['"+Time+"']=0 
where Day='"+Day+"' 

這個查詢顯示說

無效的列名

雖然它完美匹配的列名錯誤。

+3

_this查詢呈現出語法錯誤_什麼錯誤? –

+1

我很想知道你在用'''+'做什麼' –

+1

打印出完整的最終查詢字符串並檢查它是否有意義。'[]'字符中的引號字符和空格用於引用列名看起來高度懷疑我當然,整個想法對我來說是可疑的,因爲它強烈地將數據錯誤地模擬爲* metadata *,即嵌入在列名中 –

回答

1
你,也許正在尋找這樣的語法

string sql = 
    [email protected]"UPDATE Room 
      SET [{Time}] = 0 -- Time contains field's name no need in '...' 
     WHERE [Day] = '{Day}'"; 

然而,硬編碼 - ...'{Day}'...不好的做法,參數化是正道

string sql = 
    [email protected]"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); 
+1

你應該看看[我們可以停止使用AddWithValue()了嗎?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already /)並停止使用'.AddWithValue()' - 它可能會導致意外和令人驚訝的結果... –

+1

@marc_s:Thank you!很好,我已經編輯我的不成熟的回答 –

+0

我可能無法解釋我的問題。我想使用包含列名稱的變量來更新它,而不是直接寫入column.is有可能嗎? –