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#?
É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;
}