處理 C# SqlParameter 物件中的空值
使用三元運算子 (?:) 直接將 null 值指派給 SqlParameter
物件通常會導致類型不符合錯誤,例如「沒有從 DBNull 到 int 的隱式轉換」。 出現這種情況是因為三元運算子要求兩個表達式的類型相容,而 int
和 DBNull
不相容。
首選解:空白合併運算子 (??) 和明確轉換
最高效且可讀的解決方案利用空合併運算符 (??)。此運算子透過傳回左側操作數(如果它不為空)來優雅地處理空值;否則,它會傳回右側操作數。 與明確轉換為 object
相結合,這確保了類型相容性:
<code class="language-csharp">SqlParameter[] parameters = new SqlParameter[1]; SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int); planIndexParameter.Value = (object)AgeItem.AgeIndex ?? DBNull.Value; parameters[0] = planIndexParameter;</code>
此程式碼片段首先嘗試使用 AgeItem.AgeIndex
值。如果為空,則預設為DBNull.Value
。 (object)
強制轉換確保表達式始終傳回一個對象,滿足三元運算子的要求。
替代方案:條件選角
雖然不太簡潔,但條件轉換也達到了預期的結果:
<code class="language-csharp">SqlParameter[] parameters = new SqlParameter[1]; SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int); planIndexParameter.Value = (AgeItem.AgeIndex == null) ? (object)DBNull.Value : (object)AgeItem.AgeIndex; parameters[0] = planIndexParameter;</code>
此方法明確檢查 null 並將 DBNull.Value
和 AgeItem.AgeIndex
強制轉換為 object
以實現相容性。
重要提示:避免型別錯誤的關鍵在於確保三元運算子表達式的型別一致性。 在處理可為空值和資料庫參數時,明確轉換為常見類型(例如 object
)至關重要。 空合併運算子為這種特定場景提供了更優雅、更易讀的解決方案。
以上是如何在 C# 中正確地將 NULL 值指派給 SqlParameter?的詳細內容。更多資訊請關注PHP中文網其他相關文章!