我经常需要处理连接到网格控件的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