我需要使用DataContext的ExecuteCommand方法對具有多個基礎表的View執行更新。由於在對具有多個基礎表的視圖執行此類操作時已知linqToSQL的限制,因此我正在使用此方法。如何將可空int轉換爲SQL空值?
我現有的SQL語句與以下類似,我將newFieldID設置爲null值僅僅是爲了說明這個問題。在應用程序中,newFieldID被分配一個傳遞的參數,實際上可以是一個整數值;但我的問題是特定於所提供的值是空類型的情況:
using (var _ctx = new MyDataContext())
{
int? newFieldID = null;
var updateCmd = "UPDATE [SomeTable] SET fieldID = " + newFieldID + "
WHERE keyID = " + someKeyID;
try
{
_ctx.ExecuteCommand(updateCmd);
_ctx.SubmitChanges();
}
catch (Exception exc)
{
// Handle the error...
}
}
此代碼將明顯的原因是,updateCmd不會爲空值的情況下完成失敗newFieldID。那麼如何用SQL空值替換或翻譯CLR空值來完成該語句?
我知道我可以將所有這些移動到一個存儲過程,但我正在尋找現有方案的答案。我嘗試過使用DBNull.Value進行實驗,但除了將其替換爲在語句中使用newFieldID的挑戰之外,只需將它放入字符串中即可打破語句的有效性。
此外,封閉成爲一個單引號內:
var updateCmd = "UPDATE [SomeTable] SET fieldID = '" + DBNull.Value + "'
WHERE keyID = " + someKeyID;
將完成的發言,但該字段的值轉換爲整數0,而不是一個SQL空。
那麼,在這種情況下,如何將CLR null或null null轉換爲SQL Null值?
請*不要*使用字符串連接。創建一個參數化查詢並按*原樣傳遞參數*。問題不在於如何轉換可空整數。 –
首先,你應該使用參數化查詢。當newFieldID爲空時,您可以簡單地編寫「fieldID = null」。 – Plue