none
Como concatenar varias respuestas en un textbox en C#? RRS feed

  • Pregunta

  •  

    SqlDataReader rdNombImgAnexas1 = dllRutaDoctosImgAn1.GetReaderStore("sp_VinNombreImgAnex", "@IDProducto|" + textBoxIDProd.Text); while (rdNombImgAnexas1.Read()) { string NombreImgExtra = rdNombImgAnexas1.GetValue(rdNombImgAnexas1.GetOrdinal("NombreDoc")).ToString(); string RespGeneralimg = NombreImgExtra; }

    Este es mi codigo que tengo quiero concatenar el resultado de mi ciclo 
    jueves, 9 de agosto de 2018 18:50

Respuestas

  • hola

    podrias usar

    SqlDataReader rdNombImgAnexas1 = dllRutaDoctosImgAn1.GetReaderStore("sp_VinNombreImgAnex", "@IDProducto|" + textBoxIDProd.Text);
    
    List<string> items = new List<string>();
    while (rdNombImgAnexas1.Read())
    {
    	string NombreImgExtra = rdNombImgAnexas1["NombreDoc"].ToString();
    	items.Add(NombreImgExtra);
    }
    
    string RespGeneralimg = string.Join(",", items);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2018 19:11
  • Hola ElAprendisx,

    ¿Pero porque realizar un While para concatenar los resultado y no mejor devolverlo directamente desde SqlServer como un solo dato utilizando COALESCE y luego obtienes el resultado utilizando el método ExecuteScalar.

    string sql = @"DECLARE @data VARCHAR(8000)
                    SELECT @data = COALESCE(@data + ', ', '') + CampoNombre FROM MiTabla; 
                    SELECT @data as NombreDoc";
    
    SqlCommand cmd = new SqlCommand(sql, cnn);
    
    string Nombres = (string)cmd.ExecuteScalar();
    
    txtResultado.Text = Nombres;

    O utilizando STUFF también podrías obtener el mismo resultado :

    string query = @"SELECT STUFF 
                    (
                        (SELECT ',' + CampoNombre
                        FROM MiTabla
                        FOR XML PATH(''))
                    , 1, 1, '')";

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 9 de agosto de 2018 19:39
  • SqlDataReader rdNombImgAnexas1 = dllRutaDoctosImgAn1.GetReaderStore("sp_VinNombreImgAnex", "@IDProducto|" + textBoxIDProd.Text); StringBuilder RespGeneralimg = new StringBuilder(); while (rdNombImgAnexas1.Read()) { string NombreImgExtra = rdNombImgAnexas1["NombreDoc"].ToString(); RespGeneralimg.Append(string.Format("{0},", NombreImgExtra)); }

    return RespGeneralimg.ToString();


    Hola, yo mejoraria el codigo de Leandro de su segunda respuesta empleando un StringBuilder. Es mas óptimo para concatenar cadenas.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    jueves, 9 de agosto de 2018 23:08
    Moderador

Todas las respuestas

  • hola

    podrias usar

    SqlDataReader rdNombImgAnexas1 = dllRutaDoctosImgAn1.GetReaderStore("sp_VinNombreImgAnex", "@IDProducto|" + textBoxIDProd.Text);
    
    List<string> items = new List<string>();
    while (rdNombImgAnexas1.Read())
    {
    	string NombreImgExtra = rdNombImgAnexas1["NombreDoc"].ToString();
    	items.Add(NombreImgExtra);
    }
    
    string RespGeneralimg = string.Join(",", items);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2018 19:11
  • o sino tambien

    SqlDataReader rdNombImgAnexas1 = dllRutaDoctosImgAn1.GetReaderStore("sp_VinNombreImgAnex", "@IDProducto|" + textBoxIDProd.Text);
    
    string RespGeneralimg = "";
    while (rdNombImgAnexas1.Read())
    {
    	string NombreImgExtra = rdNombImgAnexas1["NombreDoc"].ToString();
    	RespGeneralimg += string.Format("{0},", NombreImgExtra);
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 9 de agosto de 2018 19:15
  • Hola ElAprendisx,

    ¿Pero porque realizar un While para concatenar los resultado y no mejor devolverlo directamente desde SqlServer como un solo dato utilizando COALESCE y luego obtienes el resultado utilizando el método ExecuteScalar.

    string sql = @"DECLARE @data VARCHAR(8000)
                    SELECT @data = COALESCE(@data + ', ', '') + CampoNombre FROM MiTabla; 
                    SELECT @data as NombreDoc";
    
    SqlCommand cmd = new SqlCommand(sql, cnn);
    
    string Nombres = (string)cmd.ExecuteScalar();
    
    txtResultado.Text = Nombres;

    O utilizando STUFF también podrías obtener el mismo resultado :

    string query = @"SELECT STUFF 
                    (
                        (SELECT ',' + CampoNombre
                        FROM MiTabla
                        FOR XML PATH(''))
                    , 1, 1, '')";

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 9 de agosto de 2018 19:39
  • SqlDataReader rdNombImgAnexas1 = dllRutaDoctosImgAn1.GetReaderStore("sp_VinNombreImgAnex", "@IDProducto|" + textBoxIDProd.Text); StringBuilder RespGeneralimg = new StringBuilder(); while (rdNombImgAnexas1.Read()) { string NombreImgExtra = rdNombImgAnexas1["NombreDoc"].ToString(); RespGeneralimg.Append(string.Format("{0},", NombreImgExtra)); }

    return RespGeneralimg.ToString();


    Hola, yo mejoraria el codigo de Leandro de su segunda respuesta empleando un StringBuilder. Es mas óptimo para concatenar cadenas.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    jueves, 9 de agosto de 2018 23:08
    Moderador
  • >>mejoraria el codigo de Leandro de su segunda respuesta empleando un StringBuilder

    es verdad, el StringBuilder es mas performante


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 10 de agosto de 2018 0:58