グリッド コントロールに接続された DataTable を頻繁に処理する必要があります。カスタム更新では、常に DBNull.Value に関連する多くのコードが生成されるようです。ここで同様の質問を見ましたが、より良い答えがあるに違いないと思います:
私が見つけたのは、データベースの更新をメソッドにカプセル化する傾向があるため、DBNull.value を null 許容型に移動してから更新のために戻す以下のようなコードになります。
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
}
これはフローの単なる例であり、コードは機能していません。オブジェクトを渡したり、「型として」を使用して潜在的なキャストの問題を飲み込んだりして、DBUll を直接 null にできることはわかっていますが、これらは両方とも潜在的なエラーを隠しているように見えます。null 許容型のメソッドの型安全性が気に入っています。
型の安全性を維持しながらこれを行うためのよりクリーンな方法はありますか?