2013-12-12 4 views
-1

Я создаю страницу входа для своего проекта, но при запуске я получаю сообщение об ошибке «Нет строки в позиции 0». Я пробовал эти строки кодов.Как обрабатывать пустой набор данных?

Imports System.Data.SqlClient 
Imports System.Data 

Partial Class Dept_login 
    Inherits System.Web.UI.Page 

    Protected Sub BtnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnSubmit.Click 
     Dim ds As New DataSet 
     'Try 
     Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("VMSConnectionString").ConnectionString) 
     con.Open() 
     Dim cmd As New SqlCommand("SELECT password FROM Dept_login WHERE user_id='" + Txtuname.Text + "'", con) 
     Dim da As New SqlDataAdapter(cmd) 
     da.Fill(ds) 

     If Not IsDBNull(ds) Then 
      If Txtpwd.Text = ds.Tables(0).Rows(0).Item("password") Then 
       Response.Redirect("Online Services.aspx") 'the page i want to redirect to after login successful 
      Else 
       Label1.Visible = True 'initially visible is false and text is INVALID PASSWORD 
      End If 

      con.Close() 
      ' Catch ex As Exception 

      ' End Try 
     End If 
    End Sub 

    Private Function Dept_login() As Integer 
     Throw New NotImplementedException 
    End Function 

End Class 
+1

Выберите лучший заголовок! –

+0

Так же, это не MVC. –

+0

plz помогите мне сейчас. Мне нужно показать этот проект моему учителю завтра. – user3030098

ответ

1

Эта линия не имеет смысла:

If Not IsDBNull(ds) Then 

DS никогда не будет DBNull. Вместо этого проверьте количество строк возвращается, как:

If ds.Tables(0).Rows.Length > 0 Then 

Вы пытаетесь получить первую строку (.Rows(0)), когда их нет - это то, что ошибка говорит вам.

Попробуйте использовать что-то вроде этого:

If ds.Tables(0).Rows.Count > 0 AndAlso Txtpwd.Text = ds.Tables(0).Rows(0).Item("password") Then 
     Response.Redirect("Online Services.aspx", False) 'the page i want to redirect to after login successful 
     Context.ApplicationInstance.CompleteRequest(); 
    Else 
     Label1.Visible = True 'initially visible is false and text is INVALID PASSWORD 
    End If 

    con.Close() 
    ' Catch ex As Exception 

    ' End Try 

(Примечание: Вы должны использовать параметризацию для запроса SQL Вы оставляете себя открытым для инъекции SQL атаки.).

+0

, пожалуйста, вы можете мне помочь мне рассказать об этом простым способом, потому что я очень новичок в asp.net, на самом деле просто изучаю it.so любезно, можете ли вы мне позвонить, где я должен помещать эти изменения и что. – user3030098

+0

Я думал, что сделал. Измените первый оператор «if» в моем ответе на второй. –

+0

, но его отображаемая длина не является членом 'system.data.datarowcollection'. В последний раз вы можете помочь с этим. – user3030098

0

Эта линия Безразлично» т имеют смысл:

If Not IsDBNull(ds) Then 

имеет смысл

If ds.Tables(0).Rows.count > 0 andalso ds.Tables..count > 0 Then 

END IF 

Надеюсь, что это поможет

+0

, когда я попробовал свой код, его работа прекрасна, но он не делает то, что он должен делать, это взять меня на другую страницу после успешного входа в систему или если недействительный пароль rhan one msg.these - это msgs, я получаю исключение первого шанса типа ' System.Threading.ThreadAbortException 'произошел в mscorlib.dll Исключение типа' System.Threading.ThreadAbortException 'произошло в mscorlib.dll, но не был обработан в коде пользователя – user3030098

+0

Response.Redirect («Online Services.aspx», false) добавьте эту надежду, это поможет –

+0

Мне жаль, но не work.as Я участвую в asp.net, поэтому я не могу исправьте его своими предложениями. Но спасибо, – user3030098

0

Вы пытались использовать datareader вместо dataadapter?

Try 
     Dim datare As SqlDataReader 
     Using cn As New SqlConnection(ConfigurationManager.ConnectionStrings("VMSConnectionString").ConnectionString) 
      Using cmd As New SqlCommand("SELECT password FROM Dept_login WHERE user_id='@User'", cn) 
       cmd.Parameters.AddWithValue("@User", Txtuname.Text) 
       cn.Open() 
       datare = cmd.ExecuteReader() 
       With datare 
        If .Read() Then 
         If .Item(0) = txtpwd.Text Then 
          Response.Redirect("Online Services.aspx") 
         Else 
          Label1.Visible = True 
         End If 
        End If 
       End With 
      End Using 
     End Using 
    Catch ex As Exception 
     Throw ex 
    End Try 

Кроме того, по запросу вы пишете user_id. Вы имели в виду имя пользователя? Правильно ли вы выполняете запрос?

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