我经常要处理连接到网格控件的 DataTables,自定义更新似乎总是会产生很多与 DBNull.Value 相关的代码。我在这里看到了一个类似的问题,但认为必须有更好的答案:
我发现我倾向于将我的数据库更新封装在方法中,所以我最终得到如下代码,我将 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
}
这只是流程的一个例子,而不是工作代码。我意识到我可以做一些事情,比如使用“作为类型”来传递对象或吞下潜在的转换问题,以使 DBUll 直接为 null,但在我看来,这两者似乎都隐藏了潜在的错误,我喜欢可空类型的方法的类型安全。
在保持类型安全的同时有更清洁的方法吗?