PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Un élément de type 'objet .NET' ne peut pas être converti vers le type 'chaîne UNICODE'
Un élément de type 'objet .NET' ne peut pas être converti vers le type 'chaîne UNICODE'
Débuté par Romain, 06 mai 2015 17:58 - 2 réponses
Posté le 06 mai 2015 - 17:58
Bonjour,

J'ai importé dans mon projet un assemblage .NET, System.data, et je rencontre un soucis dans le bout de code suivant (code permettant de lister toutes les instances SQL Server)

MonInstance est un SqlDataSourceEnumerator dynamique = SqlDataSourceEnumerator.Instance
MaListeSqlServer est un System.Data.DataTable dynamique = MonInstance.GetDataSources()
i est un entier = 0
l_ligneAffiche est une chaîne
l_glien est une chaîne

POUR TOUTE rangée DE MaListeSqlServer.Rows
i=0
l_listeInfo est un tableau associatif de chaînes
POUR TOUTE Colonne DE MaListeSqlServer.Columns
Info(Colonne.ColumnName)
Info(rangée:get_Item(i))

l_listeInfo[Majuscule(Colonne.ColumnName)]=rangée:get_Item(i)
i++
FIN
SI l_listeInfo["SERVERNAME"]<>"" ALORS
SI l_listeInfo["INSTANCENAME"]<>"" ALORS
l_ligneAffiche=l_listeInfo["SERVERNAME"]+"\"+l_listeInfo["INSTANCENAME"]
SINON
l_ligneAffiche=l_listeInfo["SERVERNAME"]
FIN

l_glien=l_ligneAffiche
SI l_listeInfo["INSTANCENAME"]<>"" ALORS
l_ligneAffiche=l_ligneAffiche + " ("+l_listeInfo["VERSION"]+")"
FIN

ListeAjoute(COMBO_INSTANCE,l_ligneAffiche+gLien(l_glien))
FIN
FIN


L'erreur que je rencontre vient de l'instruction suivante :
Info(rangée:get_Item(i))


Où par moments, je récupère une valeur (de type chaine), parfois, j'ai un plantage, et l'explication est la suivante:
Un élément de type 'objet .NET' ne peut pas être converti vers le type 'chaîne UNICODE'.

Comment pourrais-je faire cette conversion?
Merci
Membre enregistré
280 messages
Popularité : +22 (28 votes)
Posté le 08 mai 2015 - 01:48
Bonjour,
Les chaines dans Windev sont UNICODE, depuis la version 19, je crois ! Bref, en déclarant la chaîne qui pose problème comme étant une chaîne ANSI tu devrais résoudre ton problème.

--
Cordialement.

Olivier
http://www.impulse-web.com
Membre enregistré
256 messages
Popularité : +29 (29 votes)
Posté le 11 mai 2015 - 09:16
Bonjour

Les objets .NET ne sont pas implicitement convertibles en chaîne (ni en WLangage, ni en C# directement d'ailleurs).
Si c'est une chaîne .NET, le WLangage la convertit automatiquement en chaîne WLangage.
Si c'est un autre objet .NET, ça ne fonctionne pas.

Si c'est juste une trace pour débogage, il faut appeler explicitement la méthode ToString()
Info(rangée:get_Item(i).ToString())


Si vous devez récupérer une information chaîne spécifique de l'objet, il faut sans doute accéder à une propriété.