J'ai souvent affaire à des DataTables connectés à des contrôles de grille, la mise à jour personnalisée semble toujours produire beaucoup de code lié à DBNull.Value. J'ai vu une question similaire ici, mais pense qu'il doit y avoir une meilleure réponse:Traiter avec DBNull.Value
What is the best way to deal with DBNull's
Ce que je trouve est que je tends à résumer mes mises à jour de base de données dans les méthodes si je finis avec le code comme ci-dessous où je déplace la DBNull.Value à un type nullable puis retour pour la mise à jour:
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
}
C'était juste un exemple du flux et non le code de travail. Je réalise que je peux faire des choses comme passer des objets ou avaler des problèmes de moulage en utilisant "comme type" pour obtenir DBUll directement à null mais ces deux semblent cacher des erreurs potentielles, j'aime le type de sécurité de la méthode avec des types nullables.
Existe-t-il une méthode plus propre pour ce faire tout en conservant la sécurité du type?
Pourquoi n'utilisez-vous pas DataRow fortement typé directement? Vous avez mentionné que vous devez utiliser DataTables. Si ces tables de données sont fortement typées, vous pouvez envoyer une ligne de données à votre méthode. La ligne de données utilise déjà DBNull. –