söndag 17 januari 2010

Registrering av användare (4)

Efter att i huvudsak givit upp att hitta på Microsofts spaggettiwebb, med inaktuellt innehåll, så har jag skaffat "murach's ADO.NET 3.5 Linq and Entity Framwork with VB 2008". 700 sidor med förhoppningsvis aktuell information. 375 kr + moms på adlibris.

Jag avstår dock tills vidare med att använda Linq och fortsätter att använda ADO.NET och SQL direkt ett tag till.

Kollen av om användarnamnet redan finns i databasen ser nu ut så här


Message.Text = ""
Dim conn As SqlConnection
Dim connectionstring As String = ConfigurationManager.ConnectionStrings("System91").ConnectionString
conn = New SqlConnection(connectionstring)
Dim comm As SqlCommand
comm = New SqlCommand("SELECT id, username FROM [User] WHERE username='" & UserName.Text & "'", conn)

Try
conn.Open()
Userid = comm.ExecuteScalar()
'ExecuteScalar returnerar första kolumnen i första posten om den finns, annars 0. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx Userid =

Catch ex As SqlException
Message.Text += " Databasfel. " & ex.Number & ": " & ex.Message '
Finally
conn.Close()
End Try


Några kommentarer och erfarenheter
- ConfigurationManager hämtar databasens lösenord från web.config.
- Variabler deklarerade i Try-delen är lokala inom det blocket och inte tillgängliga i t.ex. catch. Så jag har nu lagt deklarationerna före Try.

- Felmeddelandet vid databasfel har kompletterats

Nästa fas är att lagra det nya användarnamnet i databasen.

If Userid = 0 Then
Dim sql As String
sql = "INSERT INTO [User] (Username) VALUES ('" & UserName.Text & "')"
comm = New SqlCommand(sql, conn)
Try
conn.Open()
Dim res As Integer = comm.ExecuteNonQuery()
Message.Text += " Användarnamnet är registrerat. "
Catch ex As SqlException
Message.Text += " Databasfel " & ex.Number & ": " & ex.Message '
Message.Text += " Användarnamnet registrerades inte. "
Finally
conn.Close()
End Try
Else
Message.Text += " Användarnamnet är redan registrerat. "
End If

Men, som jag skrev i förra avsnittet, så har denna lösning ett allvarligt fel. Om någon skriver att användarnamn som redan finns kan ju denna person därefter direkt logga in med denna användares namn. Därför måste användarnamet skyddas med ett lösenord. Det får hanteras i avsnitt 5.

Inga kommentarer:

Skicka en kommentar