Principales respuestas
Consulta con Between

Pregunta
-
Tengo una pequeña duda, que es cómo puedo realizar una consulta SQL con un between de Precios.
Me explico, tengo ciertos anuncios, con ciertos precios, y con un slider quiero realizar la consulta en un rango de precios, pero cuando escribo la consulta y este rango de precios los guardo en 2 textbox, me tira errores, pero cuando pongo los precios manualmente me funciona.
private void ObtenerPublicaciones() { string cs = ConfigurationManager.ConnectionStrings["BDTCS"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = "Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC between" + Convert.ToInt32(TxtMaximo.Text) + "and" + Convert.ToInt32(TxtMinimo.Text) + "ORDER BY Usuario.ID_USU DESC"; cmd.CommandType = CommandType.Text; cmd.Connection = con; con.Open(); DataTable ImagenesPublic = new DataTable(); ImagenesPublic.Load(cmd.ExecuteReader()); repeater1.DataSource = ImagenesPublic; repeater1.DataBind(); con.Close(); } }
Generalmente he visto ejemplos siempre relacionados con fechas y utilizar los StoreProcedure(Procedimientos Almacenados), pero no me funcionan con lo que estoy buscando...
He tratado tambien de guardar los datos que me arrojan los textbox en variables, para no tener que usar directamente el textbox y me dice:
"La cadena de entrada no tiene el formato correcto.",
"Se especificó una expresión no booleana en un contexto donde se esperaba una condición, cerca de 'betweenandORDER'."
DiegoThonCortes
- Editado DiegoThon sábado, 25 de agosto de 2018 19:56
Respuestas
-
Ya veo, pero no defines en que momento llamas al método
ObtenerPublicaciones(), en que evento , en el click de un botón , al momento de deslizar los slider, porque pueda ser que este llegando un textbox en blanco por lo que te genera el error,deberías validarlo desde tu capa de presentación ,como lo vienes haciendo podrías hacer que te ponga un valor por defecto como 0 si esta vacío el textbox
private void ObtenerPublicaciones() { int numero1; int numero2; string cs = ConfigurationManager.ConnectionStrings["BDTCS"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand(@"Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC between @maximo and @minimo ORDER BY Usuario.ID_USU DESC", con); cmd.Parameters.AddWithValue("@maximo",Int32.TryParse(TxtMaximo.Text, out numero1) ? Convert.ToInt32(TxtMaximo.Text):0); cmd.Parameters.AddWithValue("@minimo",Int32.TryParse(TxtMinimo.Text, out numero2) ?Convert.ToInt32(TxtMinimo.Text):0); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable ImagenesPublic = new DataTable(); da.Fill(ImagenesPublic); repeater1.DataSource = ImagenesPublic; repeater1.DataBind(); } }
Votar es agradecer.
Saludos.
Lima-Perú- Editado Augusto1982 domingo, 26 de agosto de 2018 1:48
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 14:54
-
de hecho el metodo lo llamo desde el page_load...
no utilizo boton para eso ya que al llamarse a traves del page_load deberia cargarlo inmediatamente supongo.
y antes de empezar a usar el slider, ya le coloque un valor por defectoprotected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) { if (Session["alive"] != null) { ObtenerPublicaciones(); } else { Response.Redirect("http://dropbox.com"); } } } private void ObtenerPublicaciones() { int numero1; int numero2; string cs = ConfigurationManager.ConnectionStrings["BDTCS"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand(@"Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC between @maximo and @minimo ORDER BY Usuario.ID_USU DESC", con); cmd.Parameters.AddWithValue("@maximo", Int32.TryParse(TxtMaximo.Text, out numero1) ? Convert.ToInt32(TxtMaximo.Text) : 0); cmd.Parameters.AddWithValue("@minimo", Int32.TryParse(TxtMinimo.Text, out numero2) ? Convert.ToInt32(TxtMinimo.Text) : 0); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable ImagenesPublic = new DataTable(); da.Fill(ImagenesPublic); repeater1.DataSource = ImagenesPublic; repeater1.DataBind(); } }
y por si acaso aqui esta la parte HTML
<div style="; top:10px; right:518px;"> Precio $: <span id="spanOutPut"></span> </div> <div id="slider" style="; top:13px; width:300px; right:190px"></div> <div style="; top:35px; right:0px;"> <label for="TxtMinimo">Precio Mínimo</label> <asp:TextBox ID="TxtMinimo" Enabled="false" TextMode="Number" runat="server"></asp:TextBox> <label for="TxtMaximo">Precio Máximo</label> <asp:TextBox ID="TxtMaximo" Enabled="false" TextMode="Number" runat="server"></asp:TextBox> </div>
y aqui el script
<script type="text/javascript"> $(document).ready(function () { var OutPutSpan = $('#spanOutPut'); var sliderElement = $('#slider'); sliderElement.slider({ range: true, min: 0, max: 1000000, values : [100000, 250000], slide: function (event, ui) { OutPutSpan.html(ui.values[0] + ' - ' + ui.values[1]); $('#TxtMinimo').val(ui.values[0]); $('#TxtMaximo').val(ui.values[1]); } }); OutPutSpan.html(sliderElement.slider('values', 0) + ' - ' + sliderElement.slider('values', 1)); $('#TxtMinimo').val(sliderElement.slider('values', 0)); $('#TxtMaximo').val(sliderElement.slider('values', 1)); }); </script>
DiegoThonCortes
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 14:54
-
La idea es esta:
en la parte de arriba a la derecha, sobre el mapa, hay un slider de rangos, y al deslizarlo derecha o izquierda va escribiendo los rangos de precio en esos dos textbox deshabilitados...
la idea es que al ir deslizandose vayan filtrandose en el cuadro de negro al lado del mapa, los avisos entre el rango de precios que salen en los textbox.
DiegoThonCortes
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 14:54
Todas las respuestas
-
hola, parece que es por los espacios que falta
cmd.CommandText = "Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario
INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC
between " + Convert.ToInt32(TxtMaximo.Text) + " and " + Convert.ToInt32(TxtMinimo.Text) + " ORDER BY Usuario.ID_USU DESC";
por otro lado es recomendable que parametrices la consulta
private void ObtenerPublicaciones() { string cs = ConfigurationManager.ConnectionStrings["BDTCS"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand(@"Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC between @maximo and @minimo ORDER BY Usuario.ID_USU DESC",con ); cmd.Parameters.AddWithValue("@maximo",Convert.ToInt32(TxtMaximo.Text)); cmd.Parameters.AddWithValue("@minimo",Convert.ToInt32(TxtMinimo.Text)); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable ImagenesPublic = new DataTable(); da.Fill(ImagenesPublic); repeater1.DataSource = ImagenesPublic; repeater1.DataBind(); } }
Votar es agradecer.
Saludos.
Lima-Perú
- Editado Augusto1982 sábado, 25 de agosto de 2018 22:04
-
-
Hola, gracias por la ayuda, pero me sigue tirando el mismo error de formato! :(
DiegoThonCortes
hola que valor estas tratando de ingresar en el textbox porque al hacer convert.Toint32 se esta esperando que sea un valor entero , si estás tratando de ingresar otro tipo de valor castealo al tipo de dato adecuado , puede ser un Conver.ToDouble o Convert.ToString .
Clase Convert
Votar es agradecer.
Saludos.
Lima-Perú- Editado Augusto1982 domingo, 26 de agosto de 2018 1:12
-
La idea es esta:
en la parte de arriba a la derecha, sobre el mapa, hay un slider de rangos, y al deslizarlo derecha o izquierda va escribiendo los rangos de precio en esos dos textbox deshabilitados...
la idea es que al ir deslizandose vayan filtrandose en el cuadro de negro al lado del mapa, los avisos entre el rango de precios que salen en los textbox.
DiegoThonCortes
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 14:54
-
Ya veo, pero no defines en que momento llamas al método
ObtenerPublicaciones(), en que evento , en el click de un botón , al momento de deslizar los slider, porque pueda ser que este llegando un textbox en blanco por lo que te genera el error,deberías validarlo desde tu capa de presentación ,como lo vienes haciendo podrías hacer que te ponga un valor por defecto como 0 si esta vacío el textbox
private void ObtenerPublicaciones() { int numero1; int numero2; string cs = ConfigurationManager.ConnectionStrings["BDTCS"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand(@"Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC between @maximo and @minimo ORDER BY Usuario.ID_USU DESC", con); cmd.Parameters.AddWithValue("@maximo",Int32.TryParse(TxtMaximo.Text, out numero1) ? Convert.ToInt32(TxtMaximo.Text):0); cmd.Parameters.AddWithValue("@minimo",Int32.TryParse(TxtMinimo.Text, out numero2) ?Convert.ToInt32(TxtMinimo.Text):0); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable ImagenesPublic = new DataTable(); da.Fill(ImagenesPublic); repeater1.DataSource = ImagenesPublic; repeater1.DataBind(); } }
Votar es agradecer.
Saludos.
Lima-Perú- Editado Augusto1982 domingo, 26 de agosto de 2018 1:48
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 14:54
-
de hecho el metodo lo llamo desde el page_load...
no utilizo boton para eso ya que al llamarse a traves del page_load deberia cargarlo inmediatamente supongo.
y antes de empezar a usar el slider, ya le coloque un valor por defectoprotected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) { if (Session["alive"] != null) { ObtenerPublicaciones(); } else { Response.Redirect("http://dropbox.com"); } } } private void ObtenerPublicaciones() { int numero1; int numero2; string cs = ConfigurationManager.ConnectionStrings["BDTCS"].ConnectionString; using (SqlConnection con = new SqlConnection(cs)) { SqlCommand cmd = new SqlCommand(@"Select FOTO_USUARIO, UBIC_PUBLIC, PRECIO_PUBLIC, ID_PUBLIC from Usuario INNER JOIN Publicacion on Publicacion.ID_USU = Usuario.ID_USU where PRECIO_PUBLIC between @maximo and @minimo ORDER BY Usuario.ID_USU DESC", con); cmd.Parameters.AddWithValue("@maximo", Int32.TryParse(TxtMaximo.Text, out numero1) ? Convert.ToInt32(TxtMaximo.Text) : 0); cmd.Parameters.AddWithValue("@minimo", Int32.TryParse(TxtMinimo.Text, out numero2) ? Convert.ToInt32(TxtMinimo.Text) : 0); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable ImagenesPublic = new DataTable(); da.Fill(ImagenesPublic); repeater1.DataSource = ImagenesPublic; repeater1.DataBind(); } }
y por si acaso aqui esta la parte HTML
<div style="; top:10px; right:518px;"> Precio $: <span id="spanOutPut"></span> </div> <div id="slider" style="; top:13px; width:300px; right:190px"></div> <div style="; top:35px; right:0px;"> <label for="TxtMinimo">Precio Mínimo</label> <asp:TextBox ID="TxtMinimo" Enabled="false" TextMode="Number" runat="server"></asp:TextBox> <label for="TxtMaximo">Precio Máximo</label> <asp:TextBox ID="TxtMaximo" Enabled="false" TextMode="Number" runat="server"></asp:TextBox> </div>
y aqui el script
<script type="text/javascript"> $(document).ready(function () { var OutPutSpan = $('#spanOutPut'); var sliderElement = $('#slider'); sliderElement.slider({ range: true, min: 0, max: 1000000, values : [100000, 250000], slide: function (event, ui) { OutPutSpan.html(ui.values[0] + ' - ' + ui.values[1]); $('#TxtMinimo').val(ui.values[0]); $('#TxtMaximo').val(ui.values[1]); } }); OutPutSpan.html(sliderElement.slider('values', 0) + ' - ' + sliderElement.slider('values', 1)); $('#TxtMinimo').val(sliderElement.slider('values', 0)); $('#TxtMaximo').val(sliderElement.slider('values', 1)); }); </script>
DiegoThonCortes
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 14:54
-
"....no utilizo boton para eso ya que al llamarse a traves del page_load deberia cargarlo inmediatamente supongo...."
Si lo carga inmedatamente cuando se carga la página, por haberlo puesto entre este código
if (!IsPostBack) {
se cargará solo cuando ingreses la primera vez y cuando recargues la página desde el url y no cuando desencadenes eventos con controles de dentro de la página,para eso es esa validación.
Ahora sigues obteniendo un error?.
Votar es agradecer.
Saludos.
Lima-Perú -
jajaj siento que ya me quedo sin recursos, no me carga ni al inicio de pagina, por eso puse "supongo" porque es lo que deberia hacer, pero ni eso hace!
tambien cree los eventos OnChange de ambos textbox y puse el metodo ahi, pero aunque ahora no me arroja ningun error, no muestra nada!
DiegoThonCortes
-
"pero aunque ahora no me arroja ningun error, no muestra nada!
no le pongas los cero que yo le puse ponle tus valores por defecto y deberia mostrate algo,donde defines esos eventos OnChange , estas intentando llamar a un método de servidor como ObtenerPublicaciones desde el lado cliente usando jquery , entonces deberías hacer algo como esto
Calling server side methods using JavaScript and JQuery in ASP.Net
por otro lado para probar podrías usar el evento de servidor de los textbox que se lanza cuando se modifica el contenido
Votar es agradecer.
Saludos.
Lima-Perú- Editado Augusto1982 domingo, 26 de agosto de 2018 2:47