none
Inserción desacomodada RRS feed

  • Pregunta

  • Que tal
    Reciban un cordial saludo.

    Estoy trabajando con ASP.NET  con una inserción a una BD, inserta todos los campos sin problema alguno, pero al momento de rectificarlos en Sql Server las inserciones se hacen en medio y no hacia abajo como normalmente debería de ser (adjunto imagen de ejemplo y código de ejemplo

    verán los ID salteados del 17 al 40 esto es por las múltiples ocasiones en que borre registros 

    Registro:

    protected void registrarButton_Click(object sender, EventArgs e)
        {

            conexion.Open();
            string nomb = nombreTextBox.Text;
            string apelli = apellidoTextBox.Text;
            string usua = usuarioTextBox.Text;
            string contra = contrasenaTextBox.Text;
            string tipo = tipoDropDownList.Text;
            string correo = correoTextBox.Text;
            string cadena = "insert into Usuarios(Nombre, Apellido, Usuario, Contrasena, Tipo, Correo) values ('" + nomb + "','" + apelli + "','" + usua + "','" + contra + "','" + tipo + "','" + correo + "')";
            SqlCommand cm = new SqlCommand(cadena, conexion);
            
            cm.Parameters.AddWithValue("@nombre", nombreTextBox.Text);
            cm.Parameters.AddWithValue("@apellido", apellidoTextBox.Text);
            cm.Parameters.AddWithValue("@usuario", usuarioTextBox.Text);
            cm.Parameters.AddWithValue("@contrasena", contrasenaTextBox.Text);
            cm.Parameters.AddWithValue("@tipo", tipoDropDownList.Text);
            cm.Parameters.AddWithValue("@correo", correoTextBox.Text);
            cm.ExecuteNonQuery();

            

            if (conexion != null)
            {
               
                Session["Nombre"] = nombreTextBox.Text;
                Session["Apellido"] = apellidoTextBox.Text;
                Session["Usuario"] = usuarioTextBox.Text;
                Session["Contrasena"] = contrasenaTextBox.Text;
                Session["Tipo"] = tipoDropDownList.Text;
                Session["Correo"] = correoTextBox.Text;
                resultadoLabel.Text = "Los datos fueron insertados correctamente";
                nombreTextBox.Text = "";
                apellidoTextBox.Text = "";
                usuarioTextBox.Text = "";
                contrasenaTextBox.Text = "";
                tipoDropDownList.Text = "";
                correoTextBox.Text = "";
                usuarioTextBox.Focus();

            }
            else
            {
                resultado1Label.Text = "Su usuario o contraseña incorrecta";
                nombreTextBox.Text = "";
                apellidoTextBox.Text = "";
                usuarioTextBox.Text = "";
                contrasenaTextBox.Text = "";
                tipoDropDownList.Text = "";
                correoTextBox.Text = "";
                usuarioTextBox.Focus();

            }
            conexion.Close();
        }

    Tabla:

    Alguien podría orientarme un poco acerca de lo que estoy haciendo mal

    Saludos!

    martes, 1 de octubre de 2019 17:00

Todas las respuestas

  • Una forma es como se guarda la información y otra es como se presenta, para asegurar esta ultima, debes usar la clausula ORDER BY.

    NOTA, no estoy 100% seguro, la razón de porque te lo presenta de esta forma, me arriesgaré diciendo que es por los  registros que borraste y porque dejó un espacio en las hojas de los arboles donde se almacena el índice, es por ello que la siguiente ocasión que insertaste la información, está fue almacenada en los espacios vacíos que el motor encontro en las hojas ( los registros que borraste ).

    https://www.sqlshack.com/sql-server-index-structure-and-concepts/




    SERGIO SANCHEZ ARIAS
    facebook twitter blogger google

    martes, 1 de octubre de 2019 17:16
  • Deleted
    martes, 1 de octubre de 2019 17:42
  • Hola Alberto-sist:

    Si bien lo que te han contado es 100% correcto, puede haber un problema en el escenario que planteas, ya que no importa mucho si inserta los registros en "Murcia o en Bilbao", porque lo que es realmente importante, es como se genera es ID_USUARIOS.

    Claramente no es un campo Identity, ni sequence porque sino podría haber saltos, pero no hacia atrás sino con "agujeros" en medio.

    Si ese campo es una clave única, generará errores.

    Supongo que tendrás un default para esa columna, ya que no la mencionas en la consulta de inserción, o dispones de un trigger que actualiza la columna una vez insertada.

    Ahí es donde hay que trabajar.

    Puedes pegar la definición exacta de la tabla, y los triggers si los tiene, para poder echarle un ojo.

    Generar scripts con Management Studio

    https://docs.microsoft.com/es-es/sql/ssms/scripting/generate-scripts-sql-server-management-studio?view=sql-server-2017

    Nota: "Murcia o Bilbao", quiere expresar, que los registros se devuelven sin un orden predecible, ya que la resolución de cualquier select, que hoy es ordenada, por muchos factores técnicos, mañana puede ser desordenada, salvo que tenga un order by.

    martes, 1 de octubre de 2019 19:15