none
Envios con intervalos de tiempo RRS feed

  • Pregunta

  • Buenos dias amigos. Tengo un sistema de envio de mensajitos masivos. La cosa es que hay como 17000 personas en la base de datos que tienen que recibir el mensaje y hay un momento en que el sistema colapsa por tanto envio. He pensado en que se podrian enviar por lotes, es decir de 100 en 100 o algo asi. Tengo el codigo el boton "enviar a todos":

    For i As Integer = 0 To 6000
            Next
            Timer1.Start()


            Dim tabla As New DataTable
            Dim Sql As New SqlDataAdapter("Tabla", conexion)
            Sql.SelectCommand.CommandType = CommandType.Text
            Sql.SelectCommand.CommandText = "select * from dbo.contactos"

            Sql.Fill(tabla)
            conexion.Close()
            DataGridView1.DataSource = tabla

            'encabezado
            DataGridView1.Columns("id_contacto").HeaderText = "Contacto #"
            DataGridView1.Columns("nombre_contacto").HeaderText = "Nombre Completo"
            DataGridView1.Columns("telefono_contacto").HeaderText = "Telefono"
            DataGridView1.Columns("email_contacto").HeaderText = "Email"

            'alineacion
            DataGridView1.Columns("id_contacto").HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter
            DataGridView1.Columns("nombre_contacto").HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter
            DataGridView1.Columns("telefono_contacto").HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter
            DataGridView1.Columns("email_contacto").HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter

            'ancho
            DataGridView1.Columns("id_contacto").Width = 50
            DataGridView1.Columns("nombre_contacto").Width = 175
            DataGridView1.Columns("telefono_contacto").Width = 70
            DataGridView1.Columns("email_contacto").Width = 135

            DataGridView1.AllowUserToAddRows = False

    como podría poner el intervalo para que se mande cada 100 y de ahi continue con el siguiente?


    Elvin Peralta

    lunes, 12 de agosto de 2013 15:12

Todas las respuestas

  • hola

    pero alli no estas paginanado nada, si hace un simple select recuperando todo

    recupoeras 6000 veces todo todo el tiempo

    deberias definir un WHERE donde poder definir un rango de que item a que item vas a trabajar

    select * from dbo.contactos WHERE id > @iddesde AND id<@idhasta

     pero los rangos deberian ir variando, definiendolo en el loop



    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    lunes, 12 de agosto de 2013 15:43
  • Leandro gracias por tu respuesta. Entiendo la idea de lo que me quieres decir, pero en si no lo veo en el codigo aun. Podrías ayudarme o explicarme bien como seria? Gracias


    Elvin Peralta

    lunes, 12 de agosto de 2013 15:51
  • hola

    lo primero que debes determinar es la cantidad de registros que tienes que trabajar, para asi poder saber por cuentas veces vas a iterar, esto lo haces ejecutando una query que sea

    SELECT COUNT(*) FROM contactos

    conociendo ese numero y sabiendo que quieres procesr de a 100 sabras cuantos loop daras en el for

    For i As integer =1 To (cantidad /100)

    Next

    dentro del for deberias aplciar el query que mendione anteriormente pasando por parametro, imagin sabes definir parametro, no ?

    entre que valores vas a recuperar el lote de datos que procesaras

    por supuesto cuando lances esa query seguramente se realizara otro for para trabjar cada item

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 12 de agosto de 2013 16:33