none
No devuelve nada con paramentros RRS feed

  • Pregunta

  • private void cargar(int eleccion, string buscar)
            {
                DataTable dt1 = new DataTable();
                if (eleccion == 1)
                {
                    string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones LIKE @param";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param", buscar);
    
                    
                    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
    
                    try
                    {
                        adapter.Fill(dt1);
                    }
                    catch
                    {
                        adapter.Fill(dt1);
                    }
                    if (dt1.Rows.Count == 0)
                    {
                        MessageBox.Show("Con esa busqueda no hay nada que mostrar", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        textBox1.Clear();
                    }
                    foreach (DataRow row in dt1.Rows)
                    {
                        listBox1.Items.Add(row["Instalaciones"].ToString());
                    }
                }

    La consulta se la pongo con parametros y no funciona. Si le pongo cocatenando string me funciona perfectamente.

    un saludo

    martes, 2 de febrero de 2016 8:45

Todas las respuestas

  • Al utilizar OleDB no se utilizan parámetros con nombre en las consultas si no marcadores de posición:

                    string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones LIKE ?";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param", buscar);

    De todas formas, ¿qué contenido tiene la variable buscar? Generalmente cuando se utiliza un parámetro con LIKE deberías añadirle los caracteres comodín (a no ser que lo hayas hecho previamente):

                    string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones LIKE ?";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param", $"%{buscar}%");


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    martes, 2 de febrero de 2016 9:32
  • Que base de datos estas utilizando? es importante mencionarlo cuando en el codigo solo se visualiza las librerias de OleDb

    Ademas cuando usas el LIKE se debe aplicar comodines para que sea libres las coincidencias, sino es como usar el "=" esperando uan coincidencia completa

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 2 de febrero de 2016 10:55
  • Acces
    martes, 2 de febrero de 2016 10:59
  • El valor de la variable buscar, quiero que el registro lo contenga. No que empiece ni que acabe sino que lo contenga

    Gracias por todo

    martes, 2 de febrero de 2016 11:00
  • >>El valor de la variable buscar, quiero que el registro lo contenga. No que empiece ni que acabe sino que lo contenga

    entonces porque usas el LIKE ? usa el igual

     string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones = @param";


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 2 de febrero de 2016 11:10
  • Sigue sin funciona cuando lo hago con paramentros.

    string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones = @parametro";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@parametro", buscar);
                    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);

    No funciona "@parametro"
    martes, 2 de febrero de 2016 11:18
  • ¿Ya has probado con el código que te he puesto?

                    string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones LIKE ?";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param", $"%{buscar}%");


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    martes, 2 de febrero de 2016 11:25
  • Perdón, si no recuerdo mal en Access se utilizan asteriscos como caracteres comodín en las operaciones LIKE:

                    string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones LIKE ?";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param", $"*{buscar}*");


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    martes, 2 de febrero de 2016 11:26
  • string query = "SELECT DISTINCT Instalaciones FROM Gmao WHERE Instalaciones LIKE @param";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param", buscar);
                    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
    string fila = listBox1.SelectedValue.ToString();
                    string query = "SELECT DISTINCT AFOs FROM Gmao WHERE Instalaciones = @param1";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param1", fila);
                    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
                    adapter.Fill(dt2);

    string fila = listBox1.SelectedValue.ToString(); string fila1 = listBox2.SelectedValue.ToString(); string query = "SELECT DISTINCT Tecnologias FROM Gmao WHERE Instalaciones = @param1 and AFOs = @param2"; OleDbCommand cmd = new OleDbCommand(query, conexion); cmd.Parameters.AddWithValue("@param1", fila); cmd.Parameters.AddWithValue("@param2", fila1); OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); adapter.Fill(dt3);

    Aqui cargo los tres listBox, pero con paramentros no me carga nada.
    miércoles, 3 de febrero de 2016 10:07
  • Me temo que debo insistir una vez más: utilizando OleDb debes indicar los parámetros en la consulta utilizando el carácter interrogante (?) como marcador de posición.

    Puedes ver ejemplos en:

    Configurar parámetros y tipos de datos de parámetros (en la sección "Utilizar parámetros con OleDbCommand o con OdbcCommand")

    o en:

    OleDbCommand.Parameters (Propiedad)

    donde se especifica literalmente:

    El proveedor OLE DB .NET no admite parámetros con nombre para pasar parámetros a una instrucción SQL o a un procedimiento almacenado al que llama OleDbCommand si CommandType está establecido en Text. En ese caso, se debe utilizar el marcador de posición signo de interrogación de cierre (?). Por ejemplo:

    SELECT * FROM Customers WHERE CustomerID = ?

     Por lo tanto deberías modificar tus consultas:

    string fila = listBox1.SelectedValue.ToString();
                    string fila1 = listBox2.SelectedValue.ToString();
                    string query = "SELECT DISTINCT Tecnologias FROM Gmao WHERE Instalaciones = ? and AFOs = ?";
                    OleDbCommand cmd = new OleDbCommand(query, conexion);
                    cmd.Parameters.AddWithValue("@param1", fila);
                    cmd.Parameters.AddWithValue("@param2", fila1);
                    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
                    adapter.Fill(dt3);


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 3 de febrero de 2016 18:17