2013-12-12 81 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

Aslo,這不是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非常陌生,實際上只是在學習它,所以你可以打電話給我,我應該把這些改變放在哪裏,什麼感謝你。 – 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一個msg.these是我得到的信息第一次機會例外類型' System.Threading.ThreadAbortException'發生在mscorlib.dll中 mscorlib中發生了類型'System.Threading.ThreadAbortException'的異常。DLL,但沒有在用戶代碼中處理 – user3030098

+0

Response.Redirect(「Online Services.aspx」,false)添加這個希望,這有助於 –

+0

我很抱歉,但沒有working.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的查詢上。你的意思是用戶名嗎?你查詢正確嗎?