Spesso ho a che fare con DataTables connessi ai controlli della griglia, l'aggiornamento personalizzato sembra sempre produrre un sacco di codice relativo a DBNull.Value. Ho visto una domanda simile qui, ma che ci deve essere una risposta migliore:Gestione DBNull.Value
What is the best way to deal with DBNull's
La cosa che ho trovato è tendo a incapsulare i miei aggiornamenti del database in modalità così finisco con il codice come sotto dove mi muovo il DBNull.Value a un tipo nullable e poi indietro per l'aggiornamento:
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
}
Questo è stato solo un esempio del flusso e non codice di lavoro. Mi rendo conto che potrei fare cose come passare oggetti o inghiottire potenziali problemi di lancio usando "come tipo" per ottenere DBUll direttamente a null ma entrambi sembrano nascondere potenziali errori, mi piace il tipo safety del metodo con tipi nullable.
Esiste un metodo più pulito per eseguire questa operazione mantenendo la sicurezza del tipo?
Perché non utilizzare direttamente DataRow fortemente digitato? Hai detto che devi usare DataTable. Se queste tabelle di dati sono fortemente digitate, puoi inviare una riga di dati al tuo metodo. La riga dati utilizza già DBNull. –