Comment SQL insert brut/champ Binaire de la valeur des octets/tableau d'entiers à l'aide de VBScript (ou VB6)?
Personne ne sait comment passer un plusieurs octets dans un fichier Binaire (ou varbinary) champ à l'aide de SQL et idéalement dans ADO (classique) & VBScript (ou Visual Basic 6)?
Je souhaite encoder 10 à 20 (peut-être plus) octets de données et de données stockées dans SQL champ db. (Ce n'est pas MS-SQLSVR, mais j'espère qu'un SQL standard pris en charge le format de travail!)
Les octets sont disponibles en une chaîne d'octets obtenus via AscB/ChrB, OU, d'un tableau d'octets (en fait des variantes de type byte obtenus par l'intermédiaire du 'cbyte') et stockés dans le tableau.
Première option: utiliser le format de la chaîne de
J'ai eu quelques (limitée) de la réussite de la création de la SQL insert:
x = ".>?hD-&91k[=" '<psuedo string of chars, some unprintable
Insert Into rawtest (byt) Values (CAST('" & x & "' as SQL_BINARY(12)))
Mais je suis inquiète de ce que la chaîne de valeurs null tronque les données dans le champ et d'autres non-impression des caractères de contrôle va obtenir de la manière de traiter les données. Est-il un moyen pour éviter cela?
Deuxième Option: Tableau D'Octets
Je me permet de mettre les données dans un tableau assez facilement, mais ne vois pas comment passer à l'instruction SQL Insert. Si je tente de passer en 12 octets, l'insertion échoue en raison de la FONTE de la tentative de stocker les données dans un Entier (4 octets). Si je passe sur un seul octet, il fonctionne, par exemple:
x = a(0)
Et continue de travailler pour 4 octets, mais échoue lorsque les débordements d'Entiers. Aussi, il réorganise les données
J'ai tenté d'utiliser diverses solutions de contournement:
Insert Into rawtest (byt) Values (CAST('12,34,45' as SQL_BINARY(12)))
Insert Into rawtest (byt) Values (CAST(&h12&h34 as SQL_BINARY(12)))
Insert Into rawtest (byt) Values (CAST(0x123456789012 as SQL_BINARY(12)))
J'ai aussi essayé des combinaisons semblables avec:
Insert Into rawtest (byt) Values (CONVERT('" & x & "', SQL_BINARY)
Mais tout fail!
Idéalement, je veux une méthode, une méthode, qui prend un petit binaire-tableau de jusqu'à 20 octets(idéalement plein d'octets plage de 0 à 255, mais pourrait prendre moins) et les transmet jusqu'à une plaine, raw, binaire SQL champ.
Idéalement je besoin de le faire en VBScript/ADO, mais peut prendre une VB6 en fonction de la solution si elle est disponible. Je veux ce que "brutes" binaire, je ne veux pas utiliser la table ascii codage, comme en Base64.
J'ai googlé jusqu'à ce que je suis engourdi et havn't pas trouvé grand chose à tout pertinent pour les champs binaires en SQL.
Pouvez-vous aider? Toutes les réponses appréciés. De nombreux thx.
OriginalL'auteur andora | 2009-05-28
Vous devez vous connecter pour publier un commentaire.
ADO classique peut manipuler de très grands (>8000) varbinary et de l'image (blob) champs directement, sans segmentation. Ci-dessous est un exemple de contre MS SQL Server qui insère des données binaires dans une table avec un INT champ ID et un varbinary(100). Dans cet exemple, une requête SQL paramétrée est insérant les données binaires à partir d'une Variante. La Variante a juste besoin d'être rempli avec les données binaires.
OriginalL'auteur Matt Spradley
VB6 pouvez accéder binaire colonnes avec la GetChunk et AppendChunk de l'ADO champ de la classe. Voir ce L'article.
Ce post de blog a une fonction pour convertir une chaîne hexadécimale de varbinary:
OriginalL'auteur Andomar
Matt m'a donné un lead-in à la solution: Bien que la cible n'est pas un champ blob et l'essentiel du code indictaes comment passer une chaîne de caractères dans la base de données via ADO, le peu, j'ai besoin de savoir comment créer les octets à se nourrir dans la variable 'vntBlobData", par la création d'un VBS 'chaîne d'octets' a partir de la source d'octets à l'aide de charb/ascb j'ai eu ma solution. J'ai maintenant un VBS solution (et à l'aide d'un bon tableau d'octets, un VB6 solution de trop!) Merci beaucoup Matt.
'VBS $2Bin:
'VBS Bin2$
OriginalL'auteur andora