我經常需要處理連接到網格控件的DataTables,自定義更新似乎總是會產生大量與DBNull.Value相關的代碼。我看到了一個類似的問題在這裏,但認爲必須有一個更好的答案:處理DBNull.Value
What is the best way to deal with DBNull's
,我覺得是我傾向於用各種方法封裝我的數據庫更新,所以我結束了類似下面的代碼,我移動的東西DBNull.value到可空類型,然後再進行更新:
private void UpdateRowEventHandler(object sender, EventArgs e)
{
Boolean? requiresSupport = null;
if (grdMainLevel1.GetFocusedRowCellValue(colASRequiresSupport) != DBNull.Value)
requiresSupport = (bool)grdMainLevel1.GetFocusedRowCellValue(colASRequiresSupport);
AdditionalSupport.UpdateASRecord(year, studentID, requiresSupport)
}
internal static void UpdateASRecord(
string year,
string studentID,
bool? requiresSupport)
{
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@year", SqlDbType.Char, 4) { Value = year });
parameters.Add(new SqlParameter("@student_id", SqlDbType.Char, 11) { Value = studentID });
if (requiresSupport == null)
parameters.Add(new SqlParameter("@requires_support", SqlDbType.Bit) { Value = DBNull.Value });
else
parameters.Add(new SqlParameter("@requires_support", SqlDbType.Bit) { Value = requiresSupport });
//execute sql query here to do update
}
這只是流動的一個例子,而不是工作的代碼。我意識到我可以使用「as type」來執行諸如傳遞對象或吞噬潛在的投射問題之類的事情,以使DBUll直接爲null,但這兩個對我來說似乎隱藏了潛在的錯誤,我喜歡使用可爲空類型的方法的類型安全性。
有沒有一種更乾淨的方法來做到這一點,同時保持類型安全?
爲什麼不直接使用強類型的DataRow?你提到你必須使用DataTables。如果這些數據表是強類型的,您可以將數據行發送到您的方法。數據行已經使用DBNull。 – 2010-08-17 10:57:38