Duplica llave en membresía
Cuando creo un nuevo miembro se me esta moviendo 3 tablas aspnet_Membership, aspnet_Users, aspnet_UserInRoles
En la primera Tabla aspnet_Membership coloca en el campo UserId=123
y lo enlaza con la segunda aspnet_Users y coloca en los campos UserId=123, UserName=XXX
y finalmente con la tabla aspnet_UserInRoles y coloca en el campo UserId=123
Con el código que tengo actualmente que es el siguiente me esta doblando la información en la base de datos de membresía pero solo en las tablas aspnet_Users, aspnet_UserInRoles osea que me esta creando ademas en la tabla de aspnet_Users un nuevo registro con el mismo UserName y con diferente UserId y lo mismo pasa con la tabla aspnet_UserInRoles
Ejemplo:
aspnet_Membership
UserId
123
aspnet_Users
UserId UserName
123 XXX
456 XXX
aspnet_UserInRoles
UserId
123
456
El problema surge cuando borro pues el solo me va a tomar el UserId=123 y me va a dejar en las tablas aspnet_Users, aspnet_UserInRoles el UserId=456 y en la tabla de aspnet_Users el campo UserName=XXX y supuestamente esta eliminado y cuando voy a hacer una inclusion con el mismo nombre pues marca error puesto que UserName=XXX ya se encuentra en la tabla aspnet_Users.
El código actual es el siguiente a mi me parece que esta bien pero no se porque se me duplica:
Try
Membership.CreateUser(TextLogin.Text, TextPassword.Text, TextEmail.Text)
Roles.AddUserToRole(TextLogin.Text, "Artista")
Catch ex As MembershipCreateUserException
LabelError.Visible = True
LabelError.Text = GetErrorMessage(ex.StatusCode)
Exit Sub
End Try
Debido a esto que no le encuentro explicación decidí borrar el registro de más en el evento rowdeleting del gridview con el siguiente código pero el hp en la variable res1 me bota dizq el valor de res1=XXX cuando en el SELECT llamado sql1 estoy es preguntando por el UserId y no por el UserName y por eso cuando hago el DELETE del sql2 se totea.
Este es el código si hay algo mal me dice please
Dim x As String = e.Keys(0).ToString
conn.Open()
Dim sql As String = "SELECT UserName FROM aspnet_Users WHERE UserName = @UserName"
Dim cmd As New SqlCommand(sql, conn)
cmd.Parameters.Add("UserName", Data.SqlDbType.NVarChar)
cmd.Parameters.Item(0).Value = x
Dim res As String = cmd.ExecuteScalar.ToString
Membership.DeleteUser(res)
'me borra correctamente el UserId=123 pero me deja el UserId=456 y UserName=XXX
Dim sql1 As String = "SELECT UserId FROM aspnet_Users WHERE UserName = @UserName1"
Dim cmd1 As New SqlCommand(sql1, conn)
cmd1.Parameters.Add("UserName1", Data.SqlDbType.NVarChar)
cmd1.Parameters.Item(0).Value = x
Dim res1 As String = cmd.ExecuteScalar.ToString
Dim sql2 As String = "DELETE FROM aspnet_UsersInRoles WHERE UserId = @UserId"
Dim cmd2 As New SqlCommand(sql2, conn)
cmd2.Parameters.Add("UserId", Data.SqlDbType.NVarChar)
cmd2.Parameters.Item(0).Value = res1
cmd2.ExecuteNonQuery()
'aqui el hp me bota dizq res1=XXX y no hace el DELETE
Dim sql3 As String = "DELETE FROM aspnet_Users WHERE UserName=@username3"
Dim cmd3 As New SqlCommand(sql3, conn)
cmd3.Parameters.Add("username3", Data.SqlDbType.NVarChar)
cmd3.Parameters.Item(0).Value = res
cmd3.ExecuteNonQuery()
Espero pronta respuesta...
En la primera Tabla aspnet_Membership coloca en el campo UserId=123
y lo enlaza con la segunda aspnet_Users y coloca en los campos UserId=123, UserName=XXX
y finalmente con la tabla aspnet_UserInRoles y coloca en el campo UserId=123
Con el código que tengo actualmente que es el siguiente me esta doblando la información en la base de datos de membresía pero solo en las tablas aspnet_Users, aspnet_UserInRoles osea que me esta creando ademas en la tabla de aspnet_Users un nuevo registro con el mismo UserName y con diferente UserId y lo mismo pasa con la tabla aspnet_UserInRoles
Ejemplo:
aspnet_Membership
UserId
123
aspnet_Users
UserId UserName
123 XXX
456 XXX
aspnet_UserInRoles
UserId
123
456
El problema surge cuando borro pues el solo me va a tomar el UserId=123 y me va a dejar en las tablas aspnet_Users, aspnet_UserInRoles el UserId=456 y en la tabla de aspnet_Users el campo UserName=XXX y supuestamente esta eliminado y cuando voy a hacer una inclusion con el mismo nombre pues marca error puesto que UserName=XXX ya se encuentra en la tabla aspnet_Users.
El código actual es el siguiente a mi me parece que esta bien pero no se porque se me duplica:
Try
Membership.CreateUser(TextLogin.Text, TextPassword.Text, TextEmail.Text)
Roles.AddUserToRole(TextLogin.Text, "Artista")
Catch ex As MembershipCreateUserException
LabelError.Visible = True
LabelError.Text = GetErrorMessage(ex.StatusCode)
Exit Sub
End Try
Debido a esto que no le encuentro explicación decidí borrar el registro de más en el evento rowdeleting del gridview con el siguiente código pero el hp en la variable res1 me bota dizq el valor de res1=XXX cuando en el SELECT llamado sql1 estoy es preguntando por el UserId y no por el UserName y por eso cuando hago el DELETE del sql2 se totea.
Este es el código si hay algo mal me dice please
Dim x As String = e.Keys(0).ToString
conn.Open()
Dim sql As String = "SELECT UserName FROM aspnet_Users WHERE UserName = @UserName"
Dim cmd As New SqlCommand(sql, conn)
cmd.Parameters.Add("UserName", Data.SqlDbType.NVarChar)
cmd.Parameters.Item(0).Value = x
Dim res As String = cmd.ExecuteScalar.ToString
Membership.DeleteUser(res)
'me borra correctamente el UserId=123 pero me deja el UserId=456 y UserName=XXX
Dim sql1 As String = "SELECT UserId FROM aspnet_Users WHERE UserName = @UserName1"
Dim cmd1 As New SqlCommand(sql1, conn)
cmd1.Parameters.Add("UserName1", Data.SqlDbType.NVarChar)
cmd1.Parameters.Item(0).Value = x
Dim res1 As String = cmd.ExecuteScalar.ToString
Dim sql2 As String = "DELETE FROM aspnet_UsersInRoles WHERE UserId = @UserId"
Dim cmd2 As New SqlCommand(sql2, conn)
cmd2.Parameters.Add("UserId", Data.SqlDbType.NVarChar)
cmd2.Parameters.Item(0).Value = res1
cmd2.ExecuteNonQuery()
'aqui el hp me bota dizq res1=XXX y no hace el DELETE
Dim sql3 As String = "DELETE FROM aspnet_Users WHERE UserName=@username3"
Dim cmd3 As New SqlCommand(sql3, conn)
cmd3.Parameters.Add("username3", Data.SqlDbType.NVarChar)
cmd3.Parameters.Item(0).Value = res
cmd3.ExecuteNonQuery()
Espero pronta respuesta...
1 respuesta
Respuesta de campeon9999
1