[SSIS] Manipulation de Blob en C#
Date of publication
4/13/2016
No comments
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
/// <summary>
/// Lire un blob
/// </summary>
///
///
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 :
/// <summary>
/// Ecriture d'un text dans un blob
/// </summary>
/// <param name="text">
/// <param name="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 :
/// <summary>
/// Ecriture d'un text dans un blob
/// </summary>
/// <param name="sb">
/// <param name="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);
}
}