none
Clase Column de Microsoft.SqlServer.Management.Smo RRS feed

  • Pregunta

  • Hola :)

    Necesito recorrer las tablas de una BD SQL Server, recoger sus campos y hacer una serie de cosas con ellos.

    Utilizo Microsoft.SqlServer.Management.Smo, recojo la BD, sus tablas, campos, todas las propiedades de todos... Hasta aquí, perfecto. 

    Mi problema surge con los tipos definidos por usuario. Cuando me encuentro con un campo cuyo DataType me devuelve el nombre de un tipo definido por el usuario, no sé cómo llegar hasta la definición de este tipo y conocer el tipo SQL concreto con el que trabajar

    Cualquier luz sobre el tema será muy agradecida :)

    Un saludo

    jueves, 24 de mayo de 2018 7:33

Todas las respuestas

  • Hola ,

    En realcion a tu consulta, ¿Pudiste resolverlo? ¿Encontraste una solucion?

    Quedo al pendiente de tus comentarios.

    Saludos cordiales


    _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    martes, 29 de mayo de 2018 19:57
    Moderador
  • Hola Tonatiuh :)

    No :( No he sido capaz de resolverlo de forma directa. Mientras encuentro una solución más elegante, cargo una lista con los tipos definidos por usuario y la recorro cuando me es necesario:

        Private Function RecogerTiposDefinidosPorElUsuario() As List(Of tipoDefUsuario)
            Dim tipos As New List(Of tipoDefUsuario)
            Dim selectSQL As String

            Using conexion As New SqlConnection(Me.cadenaConexion)
                conexion.Open()
                selectSQL = " SELECT a.name AS tipoUsuario, a.max_length, A.precision, a.is_nullable, coalesce(a.collation_name,'') AS collation_name,  b.name AS tipoSQL FROM sys.types A"
                selectSQL += " INNER JOIN sys.types B "
                selectSQL += " ON a.system_type_id = b.system_type_id "
                selectSQL += " WHERE a.is_user_defined = 1 "
                selectSQL += " AND b.is_user_defined = 0"
                '
                Dim com As SqlCommand = New SqlCommand(selectSQL, conexion)
                Dim dr As SqlDataReader = com.ExecuteReader()
                While (dr.Read())
                    Dim tipo As New tipoDefUsuario
                    tipo.tipoUsuario = dr("tipoUsuario")
                    tipo.tipoSQL = dr("tipoSQL")
                    tipo.max_length = dr("max_length")
                    tipo.precision = dr("precision")
                    tipo.is_nullable = dr("is_nullable")
                    tipo.collation_name = dr("collation_name")
                    tipos.Add(tipo)
                End While
                dr.Close()
                com.Dispose()
            End Using

            Return tipos
        End Function

    Un saludo


    miércoles, 30 de mayo de 2018 6:23