Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

ExecuteNonQuery() per Inserisci

Ci sono alcuni problemi con questo codice.

La cosa più significativa è che non stai impostando Connessione proprietà, quindi il comando non ha modo di sapere come connettersi al database.

Consiglio inoltre vivamente di utilizzare utilizzando e anche parametrizzazione la tua richiesta:

Infine, non dichiarare la connessione e il comando al di fuori della funzione a meno che non sia necessario. Dovresti mantenere la connessione e il comando in giro solo per il tempo necessario.

Quindi la tua funzione finirebbe per assomigliare a:

Public Function add(ByVal area As String, ByVal user As String) As Integer

    Dim mydao As New Connection

    Using connection As New SqlConnection(mydao.ConnectionString())

        Using command As New SqlCommand()
            ' Set the connection
            command.Connection = connection 

            ' Not necessary, but good practice
            command.CommandType = CommandType.Text 

            ' Example query using parameters
            command.CommandText = "INSERT into Area (Area, user) VALUES (@area, @user)" 

            ' Adding the parameters to the command
            command.Parameters.AddWithValue("@area", area)
            command.Parameters.AddWithValue("@user", user)

            connection.Open()

            Return command.ExecuteNonQuery()

        End Using ' Dispose Command

    End Using ' Dispose (and hence Close) Connection

End Function

Nota che al momento, restituirai sempre 0. Invece di dover controllare il valore restituito dalla funzione, l'esempio precedente genererà semplicemente un'eccezione. Ciò rende il codice leggermente più pulito (poiché il chiamante dovrebbe capire che 0 è una condizione di errore) e, se è necessario gestire l'eccezione, avvolgere semplicemente la chiamata a questa funzione in un Try-Catch bloccare