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 SqlConnectionDim 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.
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