lunes, 27 de junio de 2016

Pasar parámetros opcionales a un procedimiento almacenado

En ocasiones se nos presenta situaciones en las que necesitamos pasar parámetros opcionales a un procedimiento almacenado. Vamos a tomar como ejemplo a éste post (Listar días de un rango de fechas) que publiqué hace un tiempo atrás,  como ven,  éste procedimiento almacenado tiene  parámetros con valor por defecto, es decir, cuando se ejecuta el procedimiento almacenado y no le asigno ningún valor entonces toma el valor por defecto.

¿Pero cómo le pasamos estos parámetros desde nuestro código C#?

La idea principal es que el usuario seleccione la fecha desde y fecha hasta (estos datos deben ser obligatorios), ahora bien, para demostrar el funcionamiento de este ejemplo vamos a permitir  que  el usuario seleccione uno o más días de la semana y también que no seleccione ninguno.

Éste es el código .aspx

    <asp:Label ID="lbFechaDesde" runat="server" ></asp:Label>
    <asp:TextBox  ID="txtFechaDesde" runat="server" ></asp:TextBox>
    <asp:Calendar ID="wmcFechaDesde" runat="server" Width="260px" Height="260px"
                            OnSelectionChanged="wmcFechaDesde_OnSelectedDateChanged" />

    <asp:Label ID="lbFechaHasta" runat="server" Text="Fecha Hasta" ></asp:Label>
    <asp:TextBox ID="txtFechaHasta" runat="server" ></asp:TextBox>
    <asp:Calendar ID="wmcFechaHasta" runat="server" Width="260px" Height="260px"
                            OnSelectionChanged="wmcFechaHasta_OnSelectedDateChanged" />

    <asp:CheckBox ID="cbLunes"       runat="server" Checked="false" Text="Lu" />
    <asp:CheckBox ID="cbMartes"      runat="server" Checked="false" Text="Ma" />
    <asp:CheckBox ID="cbMiercoles" runat="server" Checked="false" Text="Mi" />
    <asp:CheckBox ID="cbJueves"      runat="server" Checked="false" Text="Ju" />
    <asp:CheckBox ID="cbViernes"     runat="server" Checked="false" Text="Vi" />

El control Button tiene el evento OnClick que se lanza cuando el usuario produce un clic en el boton y ejecuta el código que ingresemos dentro de él.

    <asp:Button ID="btnVerFechas" runat="server" Text="Ver Fechas" Width="120px"
                        OnClick="OnClick_btnVerFechas" />

    <asp:Label ID="lbMostrarFechas" runat="server" ></asp:Label>

Y éste es el código .aspx.cs

        protected void OnClick_btnVerFechas(object sender, EventArgs e)
        {
                if (DesdeEsmenorHasta(txtFechaDesde.Text, txtFechaHasta.Text))
               {
                    /*En esta parte utilizo el operador condicional ?  que no es más que hacer lo siguiente
                    string lunes = "";
                    if (cbLunes.Checked)
                          lunes = "Lunes";
                    else
                          lunes = null; */
                     string lunes        = cbLunes.Checked       ? "Lunes"        : null;
                     string martes      = cbMartes.Checked      ? "Martes"      : null;
                     string miercoles  = cbMiercoles.Checked ? "Miercoles" : null;
                     string jueves      = cbJueves.Checked       ? "Jueves"      : null;
                     string viernes      = cbViernes.Checked     ? "Viernes"    : null;
                     /*Des esta forma sabemos si el usuario seleccionó los días de la semana*/

                     DateTime FechaDesde = Convert.ToDateTime(txtFechaDesde.Text);
                     DateTime FechaHasta = Convert.ToDateTime(txtFechaHasta.Text);

                     DataSet ds = new DataSet();
                   MiPrueba mp = new MiPrueba();
                     ds = mp.Fecha_RangoFechas(lunes, martes, miercoles, jueves, viernes,
                                                                  FechaDesde, FechaHasta);
                      if (ds != null)
                     {
                            if (ds.Tables.Count > 0)
                           {
                                  lbMostrarFechas.Text = "";
                                  foreach (DataTable dt in ds.Tables)
                                 {
                                         if (dt != null)
                                        {
                                               if (dt.Rows.Count > 0)
                                              {
                                                       lbMostrarFechas.Text = lbMostrarFechas.Text +
                                                  dt.Rows[j][0].ToString() + "</br>";
                                               }
                                         }
                                  }
                           }
                             else
{
                                 showMessage("No hay datos para mostrar.");
                                    return;
}
}
               }
else
{
                   showMessage("Fecha hasta debe ser mayor a fecha desde.");
                      return;
}
        }

        protected void wmcFechaDesde_OnSelectedDateChanged(object sender, EventArgs e)
        {
              txtFechaDesde.Text = wmcFechaDesde.SelectedDate.ToString("dd/MM/yyyy");                                     }

protected void wmcFechaHasta_OnSelectedDateChanged(object sender, EventArgs e)
        {
              if (txtFechaDesde.Text != "")
              {
                    txtFechaHasta.Text = wmcFechaHasta.SelectedDate.ToString("dd/MM/yyyy");
               }
               else
               {
                    showMessage("Seleccione fecha desde");
                    return;
               }
        }

   Método que verifica si la fecha hasta es menor a fecha desde
       private bool DesdeEsmenorHasta(string desde, string hasta)
        {
                DateTime date;
                if (!DateTime.TryParse(desde, out date) || !DateTime.TryParse(hasta, out date))
                       return false;

                DateTime dateDesde = DateTime.Parse(desde);
                DateTime dateHasta = DateTime.Parse(hasta);

                return dateDesde.Date <= dateHasta.Date;
        }


     

No hay comentarios:

Publicar un comentario