Der er et par problemer med denne kode.
Det vigtigste er, at du ikke indstiller kommandoens Forbindelse egenskab, så kommandoen har ingen måde at vide, hvordan man forbinder til databasen.
Jeg vil også kraftigt anbefale at bruge ved at bruge , og også parameterisering din forespørgsel:
Endelig skal du ikke erklære forbindelsen og kommandoen uden for funktionen, medmindre du har brug for det. Du bør kun beholde forbindelsen og kommandoen, så længe du har brug for dem.
Så din funktion ville ende med at se sådan ud:
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
Bemærk, at du i øjeblikket vil returnere 0 hele tiden. I stedet for at skulle kontrollere den værdi, der returneres fra funktionen, vil ovenstående eksempel blot kaste en undtagelse. Dette giver en lidt renere kode (da den, der ringer, skal forstå, at 0 er en fejltilstand), og hvis du havde brug for at håndtere undtagelsen, skal du blot omslutte opkaldet til denne funktion i en Try-Catch-kode> blokere