none
Almacenar Color en Sql Server RRS feed

  • Pregunta

  • Buenos dias necesito poder guardar un color en sql, mi proyecto consta de varias ventanas.

    yo arme un panel de configuracion donde puedo seleccionar un color dentro del colordialog, este color pretendo  almacenarlo dentro de una tabla en Sql. al ingresar al sistema buscar el color y pasarlo a una variable de esta forma todos los formularios van en el backColor les asigno la variable con el color ya cargado.

    pero la verdad que no se como hacerlo

    lunes, 28 de enero de 2019 13:24

Todas las respuestas

  • La estructura System.Drawing.Color es serializable. Podrias simplemente serializar el valor usando cualquiera de los varios serializadores que hay en el Framework, y salvar el valor serializado en un campo de la tabla.

    Si no has usado nunca la serializacion, entonces posiblemente no merezca la pena que la aprendas solo para esto. En su lugar, puedes simplemente tomar los cuatro numeros (A, R, G, B) que hay dentro del Color, y salvar esos cuatro numeros en la base de datos. No hace falta que uses para eso cuatro campos, puedes concatenarlos, o combinarlos en binario, y guardar un unico campo que dentro tenga los cuatro numeros. Esto es mas facil de lo que parece, porque el Color ya tiene dos metodos llamados ToArgb y FromArgb que te lo convierten hacia/desde un integer, y puedes salvar el integer en un campo INT en la base de datos.

    https://docs.microsoft.com/en-us/dotnet/api/system.drawing.color.toargb?view=netframework-4.7.2

    lunes, 28 de enero de 2019 16:15
  • No se si empezar por la creación de la tabla, la cadena de conexión, o que?

    Voy a suponer que la tabla ya existe y la cadena de conexión ya la tienes declarada, entonces, 

     

            con.open
            Dim oCom As Data.SqlClient.SqlCommand

            oCom = con.CreateCommand

            oCom.CommandType = CommandType.Text

            oCom.CommandText = "INSERT INTO tuTabla " _
            & "(myColor, color, )" _
            & "VALUES (@mColor, @color_a)"

            oCom.Parameters.Add("@mColor", SqlDbType.VarChar)
            oCom.Parameters("@mColor").Value = uColor

            oCom.Parameters.Add("@color_a", SqlDbType.int)
            oCom.Parameters("@color_a").Value = vUcolor


            oCom.ExecuteNonQuery()
            oCom.Dispose()

            con.close

    donde uColor trae la cadena del componente del que quieres guardar el color y vUcolor trae el valor de ese color.

    Esto aplica cuando lo guardas la primer vez, después deberías ver si cambio el color y hacer un update a la tabla.

    Saludos

    Si te sirve marcar como respuesta

    lunes, 28 de enero de 2019 18:04
  • hola gracias por responder, ya voy a poner en practica lo que me decis

    martes, 29 de enero de 2019 11:22
  • Hola me parece que podria funcionar si, porque guardo en la bd pero solo almacena un numero diferente al de argb, por ejemplo ff4500 por decir uno, pero ya con su ayuda voy a ver si puedo sacarlo. si la base de datos esta creada, las tablas y procedimientos solo me faltaba el codigo para poder transformar el resultado de la consulta para recuperer ese color 
    martes, 29 de enero de 2019 11:24
  • Solo debes agregar '&H' a la cadena que tienes guardada para el color, para tu ejemplo sera:

            Dim Ocolor As String
            Ocolor = "FF4500"   'aqui cambia la cadena por el valor que quieras

            Ocolor = "&H" & Ocolor

            Form1.TextBox1.BackColor = System.Drawing.ColorTranslator.FromOle(Ocolor)

    y listo.

    martes, 29 de enero de 2019 20:01