¿Por qué un usuario tiene que ingresar datos de "Perfil" para ingresar datos en otras tablas?

EDITAR
Parece que el usuario tiene que ingresar algunos datos para su perfil; de lo contrario, aparece este error a continuación. Supongo que si no hay datos de perfil, el usuario no puede continuar ingresando datos en otras tablas de forma predeterminada. No quiero que la introducción de datos de perfil de usuario sea un requisito para utilizar el resto de las funciones de los sitios, ¿cómo puedo evitar esto?

EDIT 2
OK intentaré: Para ELIMINAR una restricción de CLAVE EXTRANJERA Sin embargo, mi tabla no tiene una columna de clave externa ...

(Notas- Ref1, Ref2)

Pregunta original


Actualmente he estado probando todo con el mismo usuario y todo ha funcionado bien.

Sin embargo, cuando creé un nuevo usuario por primera vez e intenté introducir datos en mi tabla personalizada, obtengo el siguiente error.

La instrucción INSERT entró en conflicto con la restricción FOREIGN KEY "FK_UserData_aspnet_Profile". El conflicto ocurrió en la base de datos "C: \ ISTATE \ APP_DATA \ ASPNETDB.MDF", tabla "dbo.aspnet_Profile", columna 'UserId'. La instrucción se ha terminado.

No estoy seguro de por qué recibo este error. Tengo los controles de usuario configurados en ASP.NET 3.5, sin embargo, todo lo que estoy usando es mi propia tabla o al menos que yo sepa.

Tengo una costumbre UserData tabla que incluye las columnas:

id, UserProfileID, CL, LL, SL, DateTime

(id es el int autoincrementado) La intención es que todos los usuarios agreguen sus datos en esta tabla y, como mencioné anteriormente, ha funcionado bien para mi primer usuario original que creé. Sin embargo, cuando creé un nuevo usuario, tengo este problema.

Aquí está el código que actualiza la base de datos.

    protected void Button1_Click(object sender, EventArgs e)
    {

        //connect to database
        MySqlConnection database = new MySqlConnection();
        database.CreateConn(); 

        //create command object
        Command = new SqlCommand(queryString, database.Connection);

        //add parameters. used to prevent sql injection
        Command.Parameters.Add("@UID", SqlDbType.UniqueIdentifier);
        Command.Parameters["@UID"].Value = Membership.GetUser().ProviderUserKey;

        Command.Parameters.Add("@CL", SqlDbType.Int);
        Command.Parameters["@CL"].Value = InCL.Text;

        Command.Parameters.Add("@LL", SqlDbType.Int);
        Command.Parameters["@LL"].Value = InLL.Text;

        Command.Parameters.Add("@SL", SqlDbType.Int);
        Command.Parameters["@SL"].Value = InSL.Text;

        Command.ExecuteNonQuery();
     }

Error de fuente:

Línea 84:
Command.ExecuteNonQuery ();

preguntado el 09 de enero de 11 a las 01:01

4 Respuestas

Parece que tiene una restricción de clave externa entre las tablas UserData y Profile. Cuando no hay un registro en asp_Profile que tenga un valor de UserID que sea igual a UserProfileID en su nuevo registro en la tabla UserData, obtendrá este error. No estoy seguro de cuál es su objetivo, pero parece que debería eliminar la restricción FK_UserData_aspnet_Profile y luego hacer que UserData.UserProfileID sea anulable, ya que no siempre habrá un registro en el perfil que corresponda con su tabla UserData.

Respondido el 09 de enero de 11 a las 04:01

¿Alguna pista de cómo deshacerse de la restricción FK_UserData_aspnet_Profile? - Greg McNulty

¿Supongo que está utilizando MS SQL Server? En Management Studio, profundice en la tabla. Abra la carpeta Restricciones debajo de la tabla, haga clic con el botón derecho en FK_UserData_aspnet_Profile y seleccione eliminar. - Costa Oaxaqueña

Haga que UserProfileID sea anulable y pase DBNull al parámetro UID si el usuario no ingresó los datos.

Respondido el 09 de enero de 11 a las 04:01

Davita, creo que entiendo la segunda parte, pero ¿cómo ayuda a esto hacer que "UserProfileID" sea anulable? Para los datos, siempre necesitaré tener el "UserProfileID" ingresado cada vez que ingrese datos. - Greg McNulty

Esto significa que el valor que está intentando ingresar en el UserProfileID columna no existe en ninguna fila de la Profile mesa en el UserID columna.

Quizás ProviderUserKey no es lo que debería usar aquí.

Respondido el 09 de enero de 11 a las 04:01

Esto se encargó de eso -

  ALTER TABLE UserData
    DROP CONSTRAINT FK_UserData_aspnet_Profile;

Respondido 06 Feb 11, 07:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.