none
Guardar cadena de 1,620,515 caracteres RRS feed

  • Pregunta

  • Hola a todos,

    Estoy queriendo guardar una cadena en una columna tipo varchar(max) en SQL Server 2012. La cadena mide 1,620,515 caracteres, pudiera ser un poco más en ocasiones. El problema es que sólo se están guardando 43,679 caracteres. También intenté con una columna tipo text con el mismo resultado.

    Estoy trabajando en VB .Net 2008 y al revisar la sentencia insert o update para actualizar el renglón veo que si estoy mandando la cadena completa, pero se trunca. No hay ningún error, simplemente se trunca el texto.

    ¿Alguna idea de cómo resolverlo?

    De antemano, gracias.
    jueves, 26 de abril de 2018 2:20

Todas las respuestas

  • Hola Jorge:

    En tu escenario yo he realizado esta prueba.

    CREATE TABLE EJEMPLOVARCHAR(ID INT IDENTITY(1,1), VALOR VARCHAR(MAX))
    GO
    CREATE PROCEDURE EJEMPLO_A (@CAMPO VARCHAR(MAX))
    AS
    	INSERT INTO EJEMPLOVARCHAR (VALOR) VALUES (@CAMPO)
    RETURN

    Luego implemento un metodo en C#


      public bool insertar()
            {
                bool result = false;
                try
                {
                    var ConnectionString = @"Password=" + bdpassword + @";Persist Security Info=True;User ID="
                      + @bdusuario + @";Initial Catalog=" + bdbasedatos + ";Data Source=" + bdservidor + ";";
    
                    string @DESRIPCION;
    
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < 2000000; i++)
                    {
                        sb.Append('1');
                    }
                    @DESRIPCION = sb.ToString();
    
    
                    SqlConnection connection = new SqlConnection(ConnectionString);
                    connection.Open();
                    SqlCommand Query = new SqlCommand("EJEMPLO_A", connection);
    
                    Query.Parameters.Add("@CAMPO", System.Data.SqlDbType.VarChar, -1).Value = @DESRIPCION;
    
                    Query.CommandType = CommandType.StoredProcedure;
                    
                    Query.ExecuteNonQuery();
                    
                    connection.Close();
                    
                    result = true;
                }
                catch (Exception e)
                {
                    MessageBox.Show("mensaje"+e.Message);
    
                }
                return result;
        
    
            }

    Y posteriormente hago una select de mi ejemplo

    select LEN(VALOR), id, valor from EJEMPLOVARCHAR 

    y me devuelve esto.

    1620516    1    aaaaaaaaaa
    2000000    2    1111111111
    2000000    3    2222222222
    2000000    4    3333333333

    No estarás apuntando erroneamente.

    No dudo que sea lo que indicas, pero para poder obtener algo más, tendrás que pegar algo de código.

    Saludos


    • Editado Javi Fernández F jueves, 26 de abril de 2018 6:43 Anotación la columna valor solo he pegado 10 char
    jueves, 26 de abril de 2018 6:19