Мне часто приходится иметь дело с таблицами DataTable, связанными с элементами управления сеткой, при пользовательском обновлении всегда создается много кода, связанного с DBNull.Value. Я видел подобный вопрос здесь, но думаю, что должен быть лучший ответ:
Как лучше всего справиться с DBNull's
Я обнаружил, что я склонен инкапсулировать обновления своей базы данных в методы, поэтому в итоге получаю код, подобный приведенному ниже, где я перемещаю 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 прямо к нулю, но мне кажется, что оба они скрывают потенциальные ошибки, мне нравится безопасность типов метода с обнуляемыми типами.
Есть ли более чистый способ сделать это при сохранении безопасности типов?