none
Cada 1ro del mes el contador regrese a 1 RRS feed

  • Pregunta

  • Que tal.

    Reciban un cordial saludo, Estoy haciendo un proyecto, en el cual contabiliza los folios emitidos por día, inserta uno nuevo por cada clic  y lo que busco es que cuando sea día 1ro del mes me inserte 1 en el contador y continué con la contabilidad.
    Leí un poco sobre "DAY" y "DATENAME" (SQL) pero no encuentro la manera adecuada de ocuparlas.
    Adjunto mi código de ejemplo al igual que el resultado en la base de datos:

    protected void aumentoButton_Click(object sender, EventArgs e)
        {
            int count = int.Parse(folioTextBox.Text);
            count++;
            folioTextBox.Text = count.ToString();
            fechaTextBox.Text = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

            conexion.Open();
            string fol = folioTextBox.Text;
            string fecha = fechaTextBox.Text;
            string cadena = "insert into Folios(Folio, Mes) values ('" + fol + "','" + fecha + "')";
            SqlCommand comando = new SqlCommand(cadena, conexion);
            comando.ExecuteNonQuery();

            respuestaLabel.Text = ("Los datos se guardaron correctamente");
            conexion.Close();

        }

    podrían orientarme un poco sobre el tema?
    Saludos!

    martes, 15 de octubre de 2019 23:00

Todas las respuestas

  • Hola Alberto-sist:

    lo que busco es que cuando sea día 1ro del mes me inserte 1 en el contador y continué con la contabilidad.

    Has puesto tu pregunta en el foro de ASP.NET, por tanto el primer problema es que si la web no se ejecuta este mes, nunca será primer día de mes. Para poder ejecutar cosas en un determinado momento, tienes un par de opciones.

    Crear un servicio de Windows que realice esta tarea.

    Windows service

    Crear un job del SQL server que haga eso mismo.

    Job SQL server

    La opción del job es mucho más simple, pero tienes que disponer de una versión SQL Server estándar o superior.

    Crear una tarea programada y que esta invoque a SqlCmd para ejecutar tu consulta de insercción

    Task scheduler

    Sql Cmd

    Cada 1ro del mes el contador regrese a 1

    Es un tema más o menos, complejo, pero es mucho más fácil, que hacer eso, hacer que la consulta que te retorna, lo que tiene insertado la tabla, retorne un contador de filas, cada vez que cambie el mes.

    create table folios (idFolio int identity(1,1),folio int, mes datetime)
    go
    insert into folios (folio, mes)
    values
    (1,'20191004'),
    (2,'20191005'),
    (3,'20191012'),
    (4,'20191014'),
    (5,'20191017'),
    (6,'20191019'),
    (7,'20191025'),
    (8,'20191101'),
    (9,'20191104'),
    (10,'20191124'),
    (11,'20191129'),
    (12,'20191204'),
    (13,'20191204'),
    (14,'20191204');
    go

    El escenario es más o menos, el que tú has planteado, pero las fechas, yo las he insertado en formato yyyyMMdd, y he cambiado los valores para disponer de 3 meses.

    Una posible solución es utilizar la función Row_number

    SELECT ROW_NUMBER()OVER (PARTITION BY DATEPART(MONTH,MES) ORDER BY MES) AS FILA, 
    * 
    FROM folios

    La misma nos permite numerar registros y reestablecer la numeración en función de, en este caso de la función datepart

    Salida

    Ahora la columna fila, reinicia la numeración por cada més.

    Row_number

    https://javifer2.blogspot.com/2019/01/numerar-filas-funciones-de-ventana.html

    Como anotación adicional, deberías de utilizar parámetros en el SQL Command

    https://blogs.msmvps.com/otelis/2007/06/04/par-225-metros-de-sqlcommand-y-las-variables-de-sql-server/

    miércoles, 16 de octubre de 2019 2:45