|
Home → WINDEV 2024 → Problème de conversion de données dans un assemblage .Net |
Problème de conversion de données dans un assemblage .Net |
Started by Frédéric RICHARD, Jul., 17 2024 3:58 PM - 4 replies |
| |
| | | |
|
| |
Registered member 27 messages |
|
Posted on July, 17 2024 - 3:58 PM |
Bonjour,
J’utilise l’assemblage IBM.Data.db2.iSeries pour accéder aux données d’un IBMi As/400.
Je lit les données d’un fichier mémo ( la colonne donnée est de type varchar(512) for bit data.
Lorsque je récupère cette zone, la méthode get_item me renvoie un tableau de 512 entiers non signés.
Je peux sans problème l’affecter à une variable de type buffer.
Par contre, ça coince dans l’autre sens.
J’essaye d’envoyer mon buffer avec la méthode set_item mais j’ai une erreur car le type de ma variable n’est pas du type attendu.
J’ai essayé de décaler un objet idb2varcharbinary mais cela ne fonctionne pas non plus.
En théorie, la méthode attend un tableau de bytes (byte[]) mais comment faire ?
Merci pour votre aide. |
| |
| |
| | | |
|
| | |
| |
Registered member 4,111 messages |
|
Posted on July, 17 2024 - 5:35 PM |
Bonjour, A première vue, il faut que tu "énumères" ton buffer octet par octet pour remplir le tableau d'octets que tu va passer en paramètre A la volée ;
FONCTION SplitBuffer(bufMonParam est buffer) : tableau d'octet nIndice est entier tabParam est tableau d'octets
POUR nIndice=1 _A_ Taille(bufMonParam) TableauAjoute(tabParam,bufMonParam[[nIndice]] FIN
RENVOYER tabParam
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 27 messages |
|
Posted on July, 18 2024 - 2:38 PM |
Bonjour,
Merci pour votre retour.
A priori, cela ne fonctionne pas car la méthode set_item() de l'objet datarow ne prend pas de tableau d'octets en entrée.
https://hostimage.windev.io/images/Capturedécran20240718à 143028_71d7cea6db26ec07ad0e46b003769eb6.png |
| |
| |
| | | |
|
| | |
| |
Registered member 27 messages |
|
Posted on July, 18 2024 - 3:16 PM |
lorsque je passe par une chaine ANSI, Unicode, un Système.String, j'obtiens l'erreur suivante :
L'invocation de la méthode du type a échoué Le framework .NET a renvoyé l'erreur suivante : Le type de valeur ne correspond pas au type de colonneImpossible de stocker <‰PNG
dans la colonne DONNEE. Type attendu est Byte[].
Pile des appels : Méthode setItemByColumnName (cl_Fichier_dotNet.setItemByColumnName), ligne 58 Méthode ModifieMémoBinaire (cl_Fichier_dotNet.ModifieMémoBinaire), ligne 33 Méthode Modifie (cl_Fichier_dotNet.Modifie), ligne 40 Clic sur BTN_testdotnet (FEN_Principale.BTN_testdotnet), ligne 20
Date : 18/07/2024 15:14:59 Projet : Progescom_DevHFSQL
Informations supplémentaires : Code erreur : 200002 Module : wd290net264.dll (01A290088m - 29.0.657.0)
Informations de débogage : System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.ArgumentException: Le type de valeur ne correspond pas au type de colonneImpossible de stocker <‰PNG
dans la colonne DONNEE. Type attendu est Byte[]. ---> System.ArgumentException: Le type de valeur ne correspond pas au type de colonne à System.Data.Common.ObjectStorage.Set(Int32 recordNo, Object value) à System.Data.DataColumn.set_Item(Int32 record, Object value) --- Fin de la trace de la pile d'exception interne --- à System.Data.DataColumn.set_Item(Int32 record, Object value) à System.Data.DataRow.set_Item(DataColumn column, Object value) --- Fin de la trace de la pile d'exception interne --- à System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) à System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) à CDotNetMethod.bInvoke(Char* pszTypeName, Char* pszMethodName, Char* pszParameters, MethodInfo gcMethod, Object gcObj, CSLevel* pclPile, Int32 nNbParamPile, Int32 bValeurRetour, STOperationDotNet* pstOperation) EIT_EXCEPTIONDOTNET EIT_TYPE_WDFILE : <4> EIT_IDCODE : <458752> |
| |
| |
| | | |
|
| | |
| |
Registered member 27 messages |
|
Posted on July, 22 2024 - 6:03 AM |
Je me répond à moi même, si cela peut aider quelqu'un dans la difficulté.
Voici le code qui me permet d'affecter un Système.Byte[] dans ma colonne:
CAS "iDB2VarCharBitData" tValue est un tableau d'entiers sans signe sur 1 octet = Value sysObject est un System.Object dynamique <- tValue :m_objCurrentRow.set_item(ColumnName,sysObject) RENVOYER Vrai
Mes premiers tests sont très concluants. |
| |
| |
| | | |
|
| | | | |
| | |
|