none
Como grabar y sacar texto con formato desde un RichTextBox hacia SQL Server con VB.net 2008

    Pregunta

  • Saludos por favor me pueden ayudar estoy haciendo un sistema de documentacion de procesos y necesito ingresar cuadros de texto, texto con viñetas y me di cuenta que utilizando los RichTextBox se mantiene el formato la copiar el texto y quisiera poder grabarlo y recuperarlo en una tabla de sql server estoy programando con visual basic.net 2008 si alguien me puede ayudar con el codigo y q' tipo de dato debo definir en el campo de la tabla Gracias..
    viernes, 19 de noviembre de 2010 17:51

Respuestas

  • hola

    el tipo de datos de la tabla es un simple VARCHAR, segun el texto podrias ponerle un tamaño grande, auqnue tambien podrias usar un NTEXT

    para grbar lo hacs como un simple string si usa parametros

    algo como esto

    Using cnn As New SqlConnection("connection string")
        cnn.Open()

        Dim sql As String = "INSERT Registro (NombreCampoTexto) VALUES (@texto)"
        Dim cmd As New SqlCommand(sql, cnn)

        cmd.Parameters.AddWithValue("@texto", RichTextBox1.Rtf)

        cmd.ExecuteNonQuery
    End Using

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Byron Giovanny lunes, 22 de noviembre de 2010 19:57
    viernes, 19 de noviembre de 2010 18:15

Todas las respuestas

  • hola

    el tipo de datos de la tabla es un simple VARCHAR, segun el texto podrias ponerle un tamaño grande, auqnue tambien podrias usar un NTEXT

    para grbar lo hacs como un simple string si usa parametros

    algo como esto

    Using cnn As New SqlConnection("connection string")
        cnn.Open()

        Dim sql As String = "INSERT Registro (NombreCampoTexto) VALUES (@texto)"
        Dim cmd As New SqlCommand(sql, cnn)

        cmd.Parameters.AddWithValue("@texto", RichTextBox1.Rtf)

        cmd.ExecuteNonQuery
    End Using

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Byron Giovanny lunes, 22 de noviembre de 2010 19:57
    viernes, 19 de noviembre de 2010 18:15
  • Gracias compañero si funciono estubo muy facil esq lo que pasa esq con lo que yo encontraba en los otros foros me decian que debia guardarlos con una array de bytes... pero ya esta gracias..... algo asi....

    Dim cn As SqlConnection = Nothing 
    Dim cmd As SqlCommand = Nothing 
    Dim reader As SqlDataReader = Nothing 
    Try 
    cn = New SqlConnection("Database=Northwind;Integrated Security=true;") 
    cn.Open() 
    cmd = New SqlCommand("SELECT Photo FROM Employees WHERE EmployeeID=1", cn) 
    reader = cmd.ExecuteReader() 
    reader.Read()
     If reader.HasRows Then 
    If Not reader.IsDBNull(0) Then 
    Dim rtf As [Byte]() = New [Byte](Convert.ToInt32((reader.GetBytes(0, 0, Nothing, 0, Int32.MaxValue))) - 1) {} 
    Dim bytesReceived As Long = reader.GetBytes(0, 0, rtf, 0, rtf.Length) 
    Dim encoding As New ASCIIEncoding() 
    richTextBox1.Rtf = encoding.GetString(rtf, 0, Convert.ToInt32(bytesReceived)) 
    End If 
    End If 
    Catch ex As Exception 
    MessageBox.Show(ex.Message) 
    Finally 
    If reader IsNot Nothing Then
     reader.Close() 
    End If
     If cn IsNot Nothing Then 
    cn.Close() 
    End If 
    End Try
    lunes, 22 de noviembre de 2010 19:57
  • Saludos gracias por tu ayuda ahora ya puedo guardar el texto RTF en la base de datos sql y despues mostrarla con el mismo formato pero en un formulario windows from.. Pero ahora quiero sacarlo en un reporte y utilizo el mismo codigo pero no me muesra de forma correcta.. 

    código para insertar en la base sql funciona perfectamente..

    logica.archivo = ubicacion.Text
    Try 
    ' ingrega con pasivo = 1
    ' ejecuta en struct procedure y se guardar el texto RTF
    logica.insertaruno("sp_Ingresa_Cuadro2", Me.RichTextBox1.Rtf)
    MessageBox.Show("Texto con formato Ingresado", "DocProcesos", MessageBoxButtons.OK,MessageBoxIcon.Information)
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try
    

    Codigo para sacar de la base y mostrar en un richtextbox pero en un windows form. me lo muestra muy bien...

    Dim codigo As Integer = 3
      Try
      logica.archivo = ubicacion.Text
      ds = logica.traertodosds("sp_devuelve_cuadro")
      For Each fila2 In ds.Tables(0).Select("id_cuadro= '" & codigo & "'")
       Me.RichTextBox1.Rtf = fila2("CampoRTF")
      Next
      Catch ex As Exception
       MessageBox.Show(ex.Message)
      End Try

    Ahora quiero mostrarlo en un reporte de DevExpress pero no muestra muy bien quiero sacar una tabla de copie de word y no me salen las lineas pero en el formulario windows form si me lo muestra que estoy haciendo mal para el reporte.... espero q me pueda ayudar gracias....

    'ejecuto el struct procedure para traer los datos
     ds = logica.traerunorow("sp_traerTextoRTF", cod, version)
     If ds.Tables(0).Rows.Count > 0 Then
       dt = ds.Tables(0)
       dt.TableName = "datos"
    
    'aki ya me lo muestra pero no respeta el formato sale desordenado.
    Me.RichTextBox1.Rtf = dt.Rows () ds.Tables(0).Rows(4)("rtf").ToString
    'esta es para llamar text de la base y cargar en el reporte pero no muestra nada..
    Me.RichTextBox1.DataBindings.Add(New System.Windows.Forms.Binding("RTF", dt, "Datos.CampoRTF"))
    
    resporteDvExpress.DataSource = dt
    
    miércoles, 24 de noviembre de 2010 14:21
  • Lo mas probable es que te salga el código RTF, se me ocurre que una de las cosas que puedes hacer es guardarlo en un archivo temporal RTF, y luego mandarlo a imprimir automatizando Word. o utilizando la API ShellExecute, como lo dice el link http://toyscaos.tripod.com/apinetcsharp.html que básicamente te permite abrir un archivo en el programa predeterminado, incluso si en vez del parametro OPEN le pasas PRINT te lo imprime.
    Jackson Rosado Developer c#, VFP, PL/SQL DBA - Oracle 10g
    miércoles, 24 de noviembre de 2010 14:39
  • Gracias ya esta casi solucionado hay que utilizar la propiedad RTF   ya puedo grabar y mostrarlo en un formulario de windows..

    Pero el problema ahora quiero mostrarlo en un reporte  DevExpress y el momento de asignar

    Me.RichTextBox1.Rtf = dt.Rows () ds.Tables(0).Rows(0)("camportf").ToString

    en el reporte

    me saca los datos pero desordenado no respeta el formato.. q puedo hacer...

    en el formulario funciona pero no en el reporte DevExpress

     

     

    miércoles, 24 de noviembre de 2010 14:47
  • Gracias ya esta casi solucionado hay que utilizar la propiedad RTF   ya puedo grabar y mostrarlo en un formulario de windows..

    Pero el problema ahora quiero mostrarlo en un reporte  DevExpress y el momento de asignar

    Me.RichTextBox1.Rtf = dt.Rows () ds.Tables(0).Rows(0)("camportf").ToString

    en el reporte

    me saca los datos pero desordenado no respeta el formato.. q puedo hacer...

    en el formulario funciona pero no en el reporte DevExpress

    miércoles, 24 de noviembre de 2010 14:48
  • Hola Byron estoy en elmismo problema que tu exactamente igual y e buscado en todos lados y no me dan respuestas concretas, y has publicado que ya te salio, pero no entiendo mucho:

    logica.archivo = ubicacion.Text
    Try 
    ' ingrega con pasivo = 1
    ' ejecuta en struct procedure y se guardar el texto RTF
    logica.insertaruno("sp_Ingresa_Cuadro2", Me.RichTextBox1.Rtf)
    MessageBox.Show("Texto con formato Ingresado", "DocProcesos", MessageBoxButtons.OK,MessageBoxIcon.Information)
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try
    
    no entiendo a que te refieres con logica.archivo=ubicacion.text
    y otra cosita que tipo de campo creo en mi base de datos, si no es mucho pedir no se si me podras pasar el codigo completo, parece que le falta codigo porque no sale bien, gracias de ante mano, suerte.
    miércoles, 22 de diciembre de 2010 0:19
  • Q tal si resulto facil te explico... logica.archivo = ubicacion.Text logica solo es una libreria dll donde tengo mis funciones para llamar a mis struc procedure y ubicacion es un label donde esta la direccion del servidor donde esta la base de datos es un archivo .dat tambien esta el nombre de la base de datos el usuario y contraseña bueno para el caso es lo de menos no interesa Lo q en mi sistema tenia q hacer es ingresar en un richTextBox cuadros de texto, textos cortos con viñeras. que estan en un documento de word entonces el usurio copia de word y lo pega en el sistema(en el richTextBox) lo que quiera y lo graba para formularios windows funciona muy bien... logica.insertaruno("sp_Ingresa_Cuadro", Me.RichTextBox1.Rtf) logica: es mi webService con la q me conecto con la base de datos. insertaruno: es la funcion para ejecutar un struct procedure con argumentos... sp_Ingresa_Cuadro2: es el nombre del struct procedure q esta en la base de datos. RichTextBox1.Rtf: es el RichTextBox1 tienes q ocupar la propiedad RTF es como la propiedad txt de un textbox para asignar y para sacar utilizas .RTF y el tipo de dato es un varchar(max) aki tambien te dejo el codigo del struct procedure ALTER PROCEDURE [dbo].[sp_Ingresa_Cuadro2] ( @textoRTF nvarchar(max)) AS BEGIN SET NOCOUNT ON; INSERT INTO dbo.cuadro ( campoRTF ) VALUES (@textoRTF) END
    • Propuesto como respuesta EUSEBIO SANTANA viernes, 31 de mayo de 2013 21:45
    miércoles, 22 de diciembre de 2010 15:44
  • Hola, Giovanny!

    También hice la misma pregunta, hace mucho tiempo, pero he ido de foro en foro y las respuestas que he logrado han sido no me han servido. 

    He tratado de GUARDAR Y CARGAR un RICHTEXTBOX en un NVARCHARD O NTEXT usando ADO sin conexión SQL, pero no he tenido éxito.

    Ya que usted ha logrado resolver el problema, y si su tiempo lo amerita, le agradecería en el alma si usted me enviara un pequeño ejemplo (un formulario) el cual tenga un RICHTEXTBOX CON UNA BASE DE DATOS en donde yo pueda GUARDAR TEXTOS CON FORMATOS Y CARGARLOS SIN QUE LOS FORMATOS SE PIERDAN.  (eusebiosantana@hotmail.com)

    Disculpe por el abuso pero, en realidad, lo necesito.

    Si le he posible puede enviarlo a: eusebiosantana@hotmail.com

    Muchas Gracias anticipadamente.   


    viernes, 31 de mayo de 2013 21:56
  • Como estan todos?

    Esto le he dado vuelta por un buen tiempo, voy a revisar sus comentarios y espero poder contar con su ayuda, saludos.


    Enyelber Altube

    viernes, 14 de marzo de 2014 19:45
  • EUSEBIO SANTANA<abbr class="affil"></abbr> Buenas Noches;

    has podido guardar y cargar en un RICHTEXTBOX, he leído y entiendo como guardar el RICHTEXTBOX pero también necesito guardar imágenes en el mismo RICHTEXTBOX, ya se que el campo va hacer NTEXT o NVARCHARD. mañana comienzo con el código, si tu ya tienes algo que tal y lo compartes y entre ambos vemos si podemos.


    Enyelber Altube

    martes, 18 de marzo de 2014 2:05
  • Como estas leandro?estoy Guardando texto e imagen como tu lo indicas, per cuando lo necesito mostrar en un formulario no me muestra la imagen solo me muestra el texto. mi campo es Nvarchar(MAX)

     Private Shared Function InsertTicketMensaje(Cticket As TicketEntity) As TicketEntity
            '* Función para Ingresar un nuevo Registro en la Tabla *
            Dim sql As String = "INSERT INTO Ticket_Message ([IdMensaje]" & _
                                        ",[IdTicket]" & _
                                        ",[Mensaje]" & _
                                        ",[IdProveniente]" & _
                                        ",[IP]" & _
                                        ",[Msg_Creado]" & _
                                        ",[Msg_Actualizado]" & _
                                        ",[IdUsuario])" & _
                                    " VALUES (@IdMensaje, " & _
                                        "@IdTicket, " & _
                                        "@Mensaje, " & _
                                        "@IdProveniente, " & _
                                        "@IP, " & _
                                        "@Msg_Creado, " & _
                                        "@Msg_Actualizado, " & _
                                        "@IdUsuario)"
    
            Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
                Dim NextId As Integer = MaxIdTicketMensaje() + 1
    
                Cticket.Msg_Creado = DateAndTime.Now        '* Fecha de Creación de Mensaje *
                Cticket.Msg_Actualizado = DateAndTime.Now   '* Fecha de Actualización del Mensaje *
    
                Dim command As New SqlCommand(sql, conn)
                command.Parameters.AddWithValue("IdMensaje", NextId)
                command.Parameters.AddWithValue("IdTicket", Cticket.IdTicket)
                command.Parameters.AddWithValue("Mensaje", Cticket.Mensaje)             '* Proviene del RichTextBox *
                command.Parameters.AddWithValue("IdProveniente", Cticket.IdProveniente)
                command.Parameters.AddWithValue("IP", Cticket.IP)
                command.Parameters.AddWithValue("Msg_Creado", Cticket.Msg_Creado)
                command.Parameters.AddWithValue("Msg_Actualizado", Cticket.Msg_Actualizado)
                command.Parameters.AddWithValue("IdUsuario", Cticket.IdUsuario)
                conn.Open()
    
                command.ExecuteNonQuery()
    
                Cticket.IdMensaje = NextId
    
                Return Cticket
            End Using
        End Function

    Cuando quierom mostrar lo que esta en la Base de datos lo hago asi:

    RichTextBox2.Text = GetByTicketMensaje(contacto.IdTicket)
    Function GetByTicketMensaje(IdTicket As Integer) As String
            '* Funcion para Tomar Todos los Datos de Una Tabla *
    
            Dim sql As String = "SELECT Mensaje FROM Ticket_Message WHERE [IdTicket] = IdTicket"
    
            Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
    
                Dim command As New SqlCommand(sql, conn)
                command.Parameters.AddWithValue("IdTicket", IdTicket)
                conn.Open()
    
                Return command.ExecuteScalar()
            End Using
        End Function

    Solo me muestra el texto.


    Enyelber Altube

    jueves, 03 de abril de 2014 16:58