2016-09-28 2 views
1

первый раз здесь. Я некоторое время боролся с этой проблемой. Этот фрагмент кода проверяет, существует ли комбинация имени пользователя и пароля, и если он переадресовывает новую форму. Проблема в том, что я также хочу проверить, истинно ли значение бита или false, и если он затем перенаправляется на другую страницу. Я просто не знаю, как это сделать.Локальная база данных Visual Studio, проверьте, истинно ли логическое значение

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles 
Button1.Click 
    Dim connection As New SqlClient.SqlConnection 
    Dim command As New SqlClient.SqlCommand 
    Dim myData As SqlClient.SqlDataReader 
    Dim Dataset As New DataSet 
    Dim adaptor As New SqlClient.SqlDataAdapter 
    connection.ConnectionString = ("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\NewFolder1\Members.mdf;Integrated Security=True") 
    command.CommandText = "SELECT * FROM [User] WHERE username = '" & TextBox1.Text & "' AND password= '" & TextBox2.Text & "';" 
    connection.Open() 
    command.Connection = connection 
    adaptor.SelectCommand = command 
    adaptor.Fill(Dataset, 0) 
    myData = command.ExecuteReader 

    If Not myData.HasRows Then 
     TextBox1.Clear() 
     TextBox2.Clear() 
     MsgBox("Forkert login, prøv igen") 
    ElseIf myData.HasRows Then 
     Me.Hide() 
     LoggetInd.Show() 
    End If 
+0

ли значение бита (истина/ложь) перейти на другую страницу перенаправлены, или это просто дополнительная проверка? –

+1

Не храните пароли как обычный текст. Хеши их. Также используйте sql-параметры - использование имени D'Artagnan приведет к сбою вашего приложения. – Plutonix

+0

Значение бит изменит перенаправленную страницу на yes – Drax

ответ

0

Вот что вы можете сделать:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim connection As New SqlClient.SqlConnection 
    Dim command As New SqlClient.SqlCommand 
    Dim myData As SqlClient.SqlDataReader 
    connection.ConnectionString = ("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\NewFolder1\Members.mdf;Integrated Security=True") 
    'Don't use SELECT *, call out the columns you want by name, in the order you want them 
    command.CommandText = "SELECT Username, Password, Bit1 FROM [User] WHERE username = '" & TextBox1.Text & "' AND password= '" & TextBox2.Text & "';" 
    connection.Open() 
    command.Connection = connection 
    myData = command.ExecuteReader(CommandBehavior.CloseConnection) 
    Dim dbUsername As String, dbPassword As String, dbBit1 As Boolean 
    If myData.Read Then 
     'Access the data in the datareader using a 0-based index 
     'Be careful as this requires you to know the datatype in the database 
     'If you have a 64bit integer stored in the database, 
     'you can't call GetInt32, you have to call GetInt64. 
     dbUsername = myData.GetString(0) 
     dbPassword = myData.GetString(1) 
     dbBit1 = myData.GetBoolean(2) 
    End If 
    'Don't forget to Close all your DataReaders 
    myData.Close() 
    If dbUsername = "" Then 
     TextBox1.Clear() 
     TextBox2.Clear() 
     MsgBox("Forkert login, prøv igen") 
    Else 
     If dbBit1 Then 
      'Redirect as needed 
     Else 
      Me.Hide() 
      LoggetInd.Show() 
     End If 
    End If 
End Sub 

Plutonix правильно, вам нужно использовать хэш для шифрования/хранения паролей. Вам также необходимо использовать параметры SQL. Ваш текущий метод - это игровая площадка для SQL-инъекций, среди прочего.

Закройте все ваши datareaders, когда вы закончите с ними, если нет, у вас будут открытые SQL-соединения повсюду. Когда вы вызываете ExecuteReader, обязательно используйте CommandBehavior.CloseConnection. Это автоматически закрывает соединение после закрытия сервера данных.

Надеемся, что ваш код будет работать, но вам нужно внести дополнительные изменения для обеспечения безопасности и стабильности.

-E

Смежные вопросы