我想通過使用包含列名稱而不是寫入列名稱的變量來更新表列。如何正確地編寫查詢?我試過使用變量值更新sql中的列
UPDATE Room
SET ['"+Time+"']=0
where Day='"+Day+"'
這個查詢顯示說
無效的列名
雖然它完美匹配的列名錯誤。
我想通過使用包含列名稱而不是寫入列名稱的變量來更新表列。如何正確地編寫查詢?我試過使用變量值更新sql中的列
UPDATE Room
SET ['"+Time+"']=0
where Day='"+Day+"'
這個查詢顯示說
無效的列名
雖然它完美匹配的列名錯誤。
:
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);
你應該看看[我們可以停止使用AddWithValue()了嗎?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already /)並停止使用'.AddWithValue()' - 它可能會導致意外和令人驚訝的結果... –
@marc_s:Thank you!很好,我已經編輯我的不成熟的回答 –
我可能無法解釋我的問題。我想使用包含列名稱的變量來更新它,而不是直接寫入column.is有可能嗎? –
_this查詢呈現出語法錯誤_什麼錯誤? –
我很想知道你在用'''+'做什麼' –
打印出完整的最終查詢字符串並檢查它是否有意義。'[]'字符中的引號字符和空格用於引用列名看起來高度懷疑我當然,整個想法對我來說是可疑的,因爲它強烈地將數據錯誤地模擬爲* metadata *,即嵌入在列名中 –