Registrare un NULL in un campo data Access

Mauro Schivalocchi 25 Punti di reputazione
2024-02-15T11:07:42.0466667+00:00

VISUAL STUDIO 2005 Un controllo TextBox contiene una data. Utilizzando ADO.NET, gli aggiornamenti con il metodo Update vengono eseguiti correttamente. Ovviamente non tutti i campi da aggiornare contengono un dato da inserire, modificare o aggiornare. In molti casi i campi nei controlli possono essere 'Vuoti'. Anche questi vengono aggiornati correttamente tranne i campi che sul Database sono definiti come Data. La mia domanda è: come posso salvare un campo TextBox che contiene un dato vuoto (Nothing o "") in un database che ha una colonna Data? In pratica, da un campo testo Vuoto dovrei salvare in un campo database Data un valore NULL. Premetto che la logica di aggiornamento utilizzata è quella generata automaticamente da 'StringBuilder'.

VB
VB
Linguaggio di programmazione orientato agli oggetti sviluppato da Microsoft implementato in .NET Framework. Precedentemente noto come Visual Basic .NET.
13 domande
0 commenti Nessun commento
{count} voti

Risposta accettata
  1. Monica Caprio (Convergys International Europe) 640 Punti di reputazione Fornitore Microsoft
    2024-02-15T12:28:00.9933333+00:00

    Gentile Mauro, Grazier per aver contattato la community di Microsoft.

    Se stai utilizzando un oggetto StringBuilder per generare la query SQL per l'aggiornamento del database, puoi aggiungere una logica per gestire i casi in cui il campo TextBox è vuoto. Se il campo TextBox è vuoto, puoi impostare il valore corrispondente nel database su NULL. Ecco un esempio di come potresti modificare la logica per gestire questo caso:

    Dim valoreTextBox As String = TextBox1.Text
    Dim query As New StringBuilder()
    query.Append("UPDATE Tabella SET ")
    If String.IsNullOrEmpty(valoreTextBox) Then
        query.Append("ColonnaData = NULL ")
    Else
        query.Append("ColonnaData = '" & valoreTextBox & "' ")
    End If
    query.Append("WHERE Condizione = valore")
    ' Esegui la query nel database utilizzando la stringa generata da StringBuilder
    

    In questo esempio, se il valore del campo TextBox è vuoto, la query imposterà il valore della colonna del database su NULL. Altrimenti, se il campo TextBox contiene un valore, la query imposterà il valore della colonna del database su quello specifico valore. Assicurati di sostituire "Tabella", "ColonnaData" e "Condizione" con i nomi corretti della tabella, della colonna e delle condizioni che stai utilizzando nel tuo caso specifico. Se questo risolve il tuo problema, indica "Sì" alla domanda e il thread verrà automaticamente chiuso e bloccato. Ti auguro una piacevole giornata. Monica.

    1 persona ha trovato utile questa risposta.

1 risposta aggiuntiva

Ordina per: Più utili
  1. Mauro Schivalocchi 25 Punti di reputazione
    2024-02-18T09:35:29.9333333+00:00

    Purtroppo la soluzione proposta non è fattibile data la struttura implementata. Si utilizzano controlli speciali (costruiti per gestire tutti i tipi di dato) i quali sono collegati al database tramite BindingSource il quale, trasmette i dati al database su comando dell'utente a mezzo di un pulsante di conferma. Dopo svariate prove, ho risolto intervenendo sull' evento Click del Binding navigator come evidenziato nella procedura seguente: Dim CurrentRow As DataRowView = DirectCast(Me.bsClienti.Current, DataRowView) ' forzatura campi vuoti If txtDtEsenzDa.InputText = Nothing Then CurrentRow("DtEsenzDa") = DBNull.Value If txtDtEsenzA.InputText = Nothing Then CurrentRow("DtEsenzA") = DBNull.Value Me.Validate() ' Convalida i dati del Form. Me.bsClienti.EndEdit() ' convalida le modifiche della tabelle. Dati.Salva(daClienti, Tabella) ' Applica le modifiche al database come si può vedere, all'atto della conferma, viene controllato il campo data interessato e se questo è vuoto viene forzato il relativo campo del record corrente a NULL. dopo questa operazione i dati del form vengono convalidati e le modifiche applicate al database tramite la routine "Salva" La soluzione funziona perfettamente e la pubblico nel caso possa essere di aiuto ad altri. Grazie dell'interessamento.

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento