none
Orden al consultar alfanuméricos RRS feed

  • Debate general

  • Hola tengo el siguiente problema:

     

    Hago una consulta donde ordeno por un campo char, que contiene alfanuméricos, concretamente números de factura, por ejemplo algunas son números sin mas 566, y otras son letras y números, A-988 por ejemplo.

    Si lanzo la consulta contra mi base de datos, fuera de la aplicación ordena bien, de esta forma:

    000

    001

    A-23

    ...

    Pero cuendo hago la consulta desde la aplicación, con un datareader da prioridad a las letras antes que los números,ordena así:

    A-23

    000

    001

    ...

     

    Me estoy volviendo loco ya, no sé que hacer..Xdd uso una base de datos oracle, y el tipo de dato es Char...si les sirve pongo como guardo los campos:

    Dim comand As New OracleClient.OracleCommand(sql, conexion)
    Dim lector As OracleClient.OracleDataReader = comand.ExecuteReader()
            While (lector.Read)
                //guardo el registro en un datatable
            End While
    


    Donde conexion y sql son variables que declaro antes.

    Muchas garcias, un saludo!

    jueves, 17 de noviembre de 2011 12:42

Todas las respuestas

  • Bueno, no sé si yo le pueda ser de ayuda pues nunca he tocado Oracle, y además nunca uso data tables porque son muy lentos.  Yo prefiero clases y colecciones y es justamente lo que le recomiendo que use.

    Si usted decidiera moverse a una clase (una por cada registro en la base de datos), puede hacer que esta clase implemente IComparable<> y así darle el ordenamiento que a usted le parezca mejor.  En su IComparable<>.CompareTo() puede revisar si el campo es numérico únicamente, y si es así darle prioridad (siempre y cuando el otro no sea numérico), o bien si ambos son numéricos entonces devolver la comparación por números, etc. y así el problema desaparece.  Es más, le da mucho poder si el día de mañana quiere hacer algo distinto.


    Jose R. MCP
    jueves, 17 de noviembre de 2011 13:45
  • Hola! Antes que nada gracias por la respuesta.

    Así como dices trabajaría yo si fuera para mi el proyecto, de hecho cuando yo hago una aplicación para mi, trabajo de esa forma.

    El problema es que es para el trabajo, y lo hacen de esa forma, es decir, lanzando consultas directamente contra la base de datos, sin usar objetos de negocio ni nada que se le parezca...

    Lo que tengo es un gridview que se llena con los datos de un sqldatasource, y paralelamente necesito tener una estructura de datos idéntica al gridview. El gridview se muestran los datos bien y se ordenan bien, el problema es con la estructura de datos alternativa, cargo el datatable con la misma consulta con la que cargo el sqldatasource y en el gidview se ordena bien y en el datatable no...es de locos.

    Un saludo y gracias!

    jueves, 17 de noviembre de 2011 15:17