none
Consulta en SQL sin importar entre mayúsculas y Minúsculas. RRS feed

  • Pregunta

  • Buenas tardes, tengo una consulta, y como hago para que SQL me traiga un codigo sin importar si tiene o no mayusculas o minisculas, ya lo e intentado muchas veces y no me da :/

    Como ven tengo por ejemplo la palabra Junk así esta en la Base de datos, pero quiero que donde dice JUANK en mayúscula también le asigne el mismo código que seria el 205

    Aqui dejo el código en C#:

                    for (int n = 0; n <= dataGridView1.RowCount; n++)
                    {
                        string p = dataGridView1.Rows[n].Cells[1].FormattedValue.ToString();

                        if (dataGridView1.Rows[n].Cells[1].Value != null)
                        {
                            string[] operadores = { ",", ".", "!", "?", ";", ":", " ", " ", "¿", "/", "'", };
                            string[] words = p.Split(operadores, StringSplitOptions.RemoveEmptyEntries);

                            foreach (string temp in words)
                            {
                                Convert.ToString(temp);
                                SqlCommand cmd = new SqlCommand("SELECT codigo , respuesta FROM Respuestas WHERE respuesta LIKE '%" + temp + "%' COLLATE Latin1_General_CS_AS", connection);
                                SqlDataAdapter da = new SqlDataAdapter(cmd);
                                System.Data.DataTable dt = new System.Data.DataTable();
                                da.Fill(dt);

                                if (temp != null)
                                {
                                    if (temp.Equals(temp, StringComparison.OrdinalIgnoreCase))
                                    {
                                        foreach (DataGridViewRow row in dataGridView1.Rows)
                                        {
                                            dataGridView1.Rows[l].Cells[t].Value = dt.AsEnumerable()
                                            .Where(x => x.Field<string>("respuesta") == Convert.ToString(temp))
                                            .Select(x => Convert.ToInt32(x.Field<string>("Codigo"))).FirstOrDefault();

                                            t = t + 1;
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Error");
                                    }
                                }
                                if (n > 1000000000)
                                {
                                    break;
                                }
                            }

                            t = 2;
                            l = l + 1;
                        }

                        if (n == cont - 1)
                        {
                            break;
                        }
                    }

    TEMP, es la palabra de cada celda, ya con el split echo.

    muchas gracias por su colaboración...!!!

    martes, 8 de agosto de 2017 21:18

Respuestas

  • Ya por fin lo solucione TOCABA PONER EL UPPER EN ESTA PARTE DEL CODIGO

    foreach (DataGridViewRow row in dataGridView1.Rows)
                                        {
                                            dataGridView1.Rows[l].Cells[t].Value = dt.AsEnumerable()
                                            .Where(x => x.Field<string>("respuesta") == Convert.ToString(temp.ToUpper()))
                                            .Select(x => Convert.ToInt32(x.Field<string>("Codigo"))).FirstOrDefault();

                                            t = t + 1;
                                            break;
                                        }

    gracias igualmente!!!

    miércoles, 9 de agosto de 2017 16:32

Todas las respuestas

  • Haces lo opuesto a lo que buscas, debes de buscar una intercalación que no exija sensibilidad a las mayúsculas 'CI' y aplicarlo al lado derecho de la columna que quieres invalidar la intercalación configurada. Sin embargo, queda simple si comparas ambos lados de la expresión bajo la misma "forma del carácter", por ejemplo:

    ...WHERE UPPER(respuesta) LIKE '%" + UPPER(temp) + "%'", connection);


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 8 de agosto de 2017 21:27
  • Sale ese error:

    El nombre 'UPPER' no existe en el contexto actual.

    martes, 8 de agosto de 2017 21:39
  • Buenas compañero, 

    El problema es que el compañero Williams se le han ido dos comillas

    "Select codigo, respuesta from respuestas where upper(respuesta) like '%upper(" + temp + ")%' " 
    Prueba y nos comentas. 



    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    martes, 8 de agosto de 2017 22:03
  • "...WHERE UPPER(respuesta) LIKE '%' + '" + temp.ToUpper() + "' + '%'", connection);

    Actualiza la expresión por favor, sin embargo, creo que está por demás advertir que concatenar expresiones a la cadena que contiene la consulta sql no es la manera correcta, debes de parametrizar la consulta.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 8 de agosto de 2017 22:04
  • Nada, ya lo intente de las 3 formas, no sale ningún error, pero al momento de asignar siempre asigna el 0 y no el que realmente debería asignar :(
    martes, 8 de agosto de 2017 22:19
  • Ya por fin lo solucione TOCABA PONER EL UPPER EN ESTA PARTE DEL CODIGO

    foreach (DataGridViewRow row in dataGridView1.Rows)
                                        {
                                            dataGridView1.Rows[l].Cells[t].Value = dt.AsEnumerable()
                                            .Where(x => x.Field<string>("respuesta") == Convert.ToString(temp.ToUpper()))
                                            .Select(x => Convert.ToInt32(x.Field<string>("Codigo"))).FirstOrDefault();

                                            t = t + 1;
                                            break;
                                        }

    gracias igualmente!!!

    miércoles, 9 de agosto de 2017 16:32