2016-06-04 12 views
0

Ich habe Login-Seite in meinem Asp.NET-Projekt, was ich will im Grunde ist die Zeile einer Spalte einer Abfrage, die die i_idficha, contrasena und s_nombre zurückgibt. Die Spalte s_nombre wird in einer Variablen SESSION gespeichert. Hier ist, was ich habe:Wie erhalten Sie Werte in einer Spalte einer DataTable?

Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click 

    Threading.Thread.Sleep(2000) 
    Dim cmd As New SqlCommand("SELECT dbo.USUARIO.i_idficha, dbo.CONTRASENA_USUARIO.s_contrasena, dbo.USUARIO.s_nombre FROM dbo.USUARIO INNER JOIN dbo.CONTRASENA_USUARIO ON dbo.USUARIO.i_idficha = dbo.CONTRASENA_USUARIO.i_ficha WHERE i_idficha = @ficha AND s_contrasena = @pass", cn) 
    cmd.CommandType = CommandType.Text 
    cmd.Parameters.AddWithValue("@ficha", SqlDbType.Int).Value = txtUser.Text 
    cmd.Parameters.AddWithValue("@pass", SqlDbType.VarChar).Value = txtPass.Text 
    cn.Open() 
    Dim adp As New SqlDataAdapter(cmd) 
    Dim table As New DataTable() 

    adp.Fill(table) 
    Dim nombre = table.Rows("s_nombre").ToString() 
    If table.Rows.Count <> 0 Then 
     If CheckBox1.Checked Then 
      Response.Cookies("FICHA").Value = txtUser.Text 
      Response.Cookies("CONTRASENA").Value = txtPass.Text 

      Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(10) 
      Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(10) 
     Else 
      Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(-1) 
      Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(-1) 
     End If 

     Session("NOMBRE") = nombre 
     Response.Redirect("~/Default.aspx") 
    Else 
     Panel1.Visible = True 
    End If 

End Sub 

Was ich hier tat, war eine variable nombre genannt zu erklären, die

table.Rows("s_nombre").ToString()

gleich ist und es in einer Variablen SESSION speichern ("NOMBRE") aber funktioniert nicht.

Dies ist der Fehler:

The input string does not have the correct format

Dies ist mein Code-Behind für die Default.aspx:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 
    If Session("FICHA") <> Nothing Then 
     Label1.Text = "Bienvendio <i aria-hidden='true' class='glyphicon glyphicon-user'></i> " & Session("NOMBRE").ToString() 
    Else 
     Response.Redirect("~/Login.aspx") 
    End If 
End Sub 

Protected Sub linkBtnLogOut_Click(sender As Object, e As EventArgs) Handles linkBtnLogOut.Click 
    Session("FICHA") = Nothing 
    Response.Redirect("~/Login.aspx") 
End Sub 

Wie die Spalte speichern s_nombre meiner Abfrage genannt?

Antwort

0

Ich bin ziemlich sicher, dass table.Rows (x) erwartet den Zeilenindex, nicht die Spaltenfolge. So sollte es sein:

Dim nombre = table.Rows(0)("s_nombre").ToString() 
+0

Hallo ein anderer Fehler ourrediert: > Es gibt keine Zeile an Position 0 –

+0

Dies bedeutet, dass die DataTable leer ist. Verschieben Sie diese Codezeile innerhalb der Anweisung "If table.Rows.Count <> 0 Then" if, um diesen Fehler zu vermeiden. Überprüfen Sie dann Ihre SELECT-Anweisung, um sicherzustellen, dass Daten zurückgegeben werden. – Aki

+0

Hallo, ich bewege diese Zeile innerhalb meiner IF-Anweisung, aber das Programm tut nichts, nicht zu Default.aspx umleiten, ich werde meine Frage bearbeiten, um meinen Code-Behind für die Default.aspx hinzuzufügen. Die SELECT-Abfrage gibt Daten zurück. –

0

Ich möchte meine Antwort schreiben, ich gelöst, weil ich meinen Code schreiben vergessen

SESSION("FICHA") = txtUser.Text 

dann für die Anmeldung würde:

Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click 
      Threading.Thread.Sleep(2000) 
    Dim cmd As New SqlCommand("SELECT dbo.USUARIO.i_idficha, dbo.CONTRASENA_USUARIO.s_contrasena, dbo.USUARIO.s_nombre FROM dbo.USUARIO INNER JOIN dbo.CONTRASENA_USUARIO ON dbo.USUARIO.i_idficha = dbo.CONTRASENA_USUARIO.i_ficha WHERE i_idficha = @ficha AND s_contrasena = @pass", cn) 
    cmd.CommandType = CommandType.Text 
    cmd.Parameters.AddWithValue("@ficha", SqlDbType.Int).Value = txtUser.Text 
    cmd.Parameters.AddWithValue("@pass", SqlDbType.VarChar).Value = txtPass.Text 
    cn.Open() 
    Dim adp As New SqlDataAdapter(cmd) 
    Dim table As New DataTable() 
    adp.Fill(table) 
    If table.Rows.Count <> 0 Then 

     If CheckBox1.Checked Then 
      Response.Cookies("FICHA").Value = txtUser.Text 
      Response.Cookies("CONTRASENA").Value = txtPass.Text 

      Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(10) 
      Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(10) 
     Else 
      Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(-1) 
      Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(-1) 
     End If 
     Dim nombre = table.Rows(0)(2).ToString() 
     Session("FICHA") = txtUser.Text 
     Session("NOMBRE") = nombre 
     Response.Redirect("~/Default.aspx") 
    Else 
     Panel1.Visible = True 
    End If 

End Sub 

Danke @ Aki

+0

Schön zu sehen, dass es funktioniert. – Aki

Verwandte Themen