2013-02-12 3 views
1

У меня возникли проблемы с получением цикла, чтобы увидеть больше, чем только первую строку данных. Функция ссылочного набора данных получает все необходимые строки без проблем, поэтому я уверен, что проблема должна быть с кодом.Как проложить строки в Datatable?

Dim dtLogin As System.Data.DataTable 
    Dim userDetails As New dsMembersTableAdapters.mi_membersTableAdapter 
    Dim rowsLogin As System.Data.DataRow 

    'Fill datatable using method from dataset 
    dtLogin = userDetails.GetUserData() 

    'Find cotrols hidden in Login View 
    Dim user As String = txtUser.Text 
    Dim pass As String = txtPass.Text 

    'Search all users 
    For Each rowsLogin In dtLogin.Rows 
     'Find Username Entered 
     If user = dtLogin.Rows.Item(0).Item(1) Then 
      'Checks users password matches 
      If pass = dtLogin.Rows.Item(0).Item(2) Then 
       If dtLogin.Rows.Item(0).Item(6) = 1 Then 
        'Log User In 
        FormsAuthentication.RedirectFromLoginPage(dtLogin.Rows.Item(0).Item(1), True) 
       Else 
        'Account Not Active Message 
        lblValidation.Text = "There is a problem with your account, please contact the website administration" 
       End If 
      Else 
       'Incorrect Password Message 
       lblValidation.Text = "Incorrect Password" 
      End If 
     Else 
      'No User in DB Message 
      lblValidation.Text = "No User Found" + dtLogin.Rows.Item(0).Item(1) 
     End If 
    Next 

Если бы кто-нибудь мог вообще помочь или направить меня в прямое прямое, что было бы фантастически! Заранее спасибо :)

+0

Опубликованные ответы выглядят правильно ... но почему вы просматриваете все свои пользовательские данные для аутентификации одного пользователя? –

+0

попробуйте никогда не использовать индексы ... если вы измените порядок своего оператора выбора, весь ваш код будет разрушен ... см. Мой комментарий к моему ответу и вместо этого используйте 'row []'. – balexandre

ответ

0

dtLogin.Rows.Item(0).Item(1) - (0) после того, как Rows.Item относится к индексу в коллекции строк, так что вы» всегда смотря на первую строку.

Вместо того, чтобы использовать dtLogin.Rows.Item(0).Item(1) и т. Д. В вашей петле, используйте rowsLogin.Item(1).

+0

Это работало как шарм - спасибо :) –

1

При использовании For Each rowsLogin In dtLogin.Rows вы сообщаете компилятору, что для каждого элемента dtLogin.Rows присвойте его переменной rowsLogin.

Таким образом, каждый раз, внутри цикла, вы прекратите использование dtLogin.Rows.Item(0).Item(2) как в If pass = dtLogin.Rows.Item(0).Item(2) Then, а скорее If pass = rowsLogin.Item(0).Item(2) Then

+0

Спасибо за помощь, но это просто порождает ошибку - «Открытый элемент« Элемент »по типу« Целое »не найден». –

+0

Я бы предположил, что вы пытаетесь получить этот элемент по имени, поэтому я бы использовал 'rowsLogin [" my_column_name "]' вместо того, как вы вытаскиваете значения – balexandre

0
dim bUserFound as boolean = false  
For Each rowsLogin In dtLogin.Rows 
      'Find Username Entered 
      If user = rowsLogin(1) Then 
bUserFound = true 
       'Checks users password matches 
       If pass = rowsLogin(2) Then 
        If rowsLogin(6) = 1 Then 
         'Log User In 
         FormsAuthentication.RedirectFromLoginPage(rowsLogin(1), True) 
        Else 
         'Account Not Active Message 
         lblValidation.Text = "There is a problem with your account, please contact the website administration" 
        End If 
       Else 
        'Incorrect Password Message 
        lblValidation.Text = "Incorrect Password" 
       End If 
      Else 
       'No User in DB Message 
       ' lblValidation.Text = "No User Found" + rowsLogin(1) 

      End If 
     Next 

if not bUserFound then 
lblValidation.Text = "No User Found" 
end if 

Для более четкого кода, который вы должны использовать rowsLogin ("USER_NAME") вместо rowsLogin (1), rowsLogin ("USER_PWD") вместо rowsLogin (2), и т.д.

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