Dans SSIS, la manipulation de champ de type TEXT n’a rien de très compliqué. Étrangement, elle semble en rebuter plus d’un. Pour faciliter la chose, j’ai traduit ma snippet VB.net (oui au début de SSI, comme avec WF, il n’y avait que du VB).

Voici donc les 3 méthodes que j’utilise couramment pour  manipuler un champ TEXT. Dans SSIS, pour ce cas on a un DataType : DT_TEXT avec un CodePage : 1252, ce qui explique les encodages (à adapter en fonction des besoins)

 

Méthode pour lire un Blob et obtenir ne retour une String

///  
/// Lire un blob 
///  
///  
///  
private static String BlobToString(BlobColumn blob) 
{ 
    try 
    { 
        if (blob == null) 
        { 
            return null; 
        } 
        else 
        { 
            Int32 length = Convert.ToInt32(blob.Length); 
            Byte[] data = blob.GetBlobData(0, length); 
            return System.Text.Encoding.GetEncoding(1252).GetString(data); 
        } 
    } 
    catch (Exception ex) 
    { 
        Trace.TraceError(ex.Message); 
        return null; 
    } 
}

Méthode pour écrire une String dans un Blob :

///  
/// Ecriture d'un text dans un blob 
///  
///  
///  
private static void StringToBlob(String text, BlobColumn blob) 
{ 
    try 
    { 
        if (String.IsNullOrWhiteSpace(text)) return; 
 
 
        // Ecriture de la donnée 
        Byte[] data = System.Text.Encoding.GetEncoding(1252).GetBytes(text); 
        blob.AddBlobData(data); 
    } 
    catch (Exception ex) 
    { 
        Trace.TraceError(ex.Message); 
    } 
}

 

En bonus, la variante avec un StringBuilder :

///  
/// Ecriture d'un text dans un blob 
///  
///  
///  
private static void StringToBlob(StringBuilder sb, BlobColumn blob) 
{ 
    try 
    { 
        // Test le StringBuilder 
        if (sb == null || sb.Length <= 0) return; 
 
 
        // Test si on a un text utilisable 
        String text = sb.ToString().Trim(); 
        if (String.IsNullOrWhiteSpace(text)) return; 
 
 
        // Ecriture de la donnée 
        Byte[] data = System.Text.Encoding.GetEncoding(1252).GetBytes(text); 
        blob.AddBlobData(data); 
    } 
    catch (Exception ex) 
    { 
        Trace.TraceError(ex.Message); 
    } 
}