pourquoi est-convertit une chaîne de type VARBINARY dans SQL Server seulement la conversion de premier personnage?
Je suis en utilisant NLog pour ouvrir une session dans mon dossier de candidature et en tant que partie de ce que nous connectant, le numéro de client, qui est une chaîne de caractères en C#, et varbinary(32) dans la base de données. Je suis en utilisant le code SQL suivant pour ce paramètre. Le reste de l'instruction SQL fonctionne très bien:
CONVERT(varbinary(32), @CustNumber)
et suivants NLog paramètre:
<parameter name="@CustNumber" layout="${event-context:item=CustNumber}" />
et suivants du code en C# pour ajouter le Nlog paramètre:
myEvent.Properties.Add("CustNumber", custNumber);
Pour une raison quelconque, la valeur à stocker dans la table n'est que le premier caractère de l'original à la Clientèle Numéro de chaîne. J'ai le double et le triple vérifié pour s'assurer que je ne suis pas la troncation de la chaîne avant d'être envoyé à la base de données. Toute aide serait grandement appréciée.
varbinary
et pas un varchar
/nvarchar
?Juste une exigence de mon entreprise, je suppose que c'est une naïve tentative de mesure de sécurité. Ma partie n'est pas la question pourquoi, juste pour crier à l'ordinateur.
Tronquer à 1 signifie généralement que vous êtes absent une longueur de déclaration d'un paramètre ou d'une variable de définition. Pas familier avec
NLog
mais ne fait que s'attendre à une longueur de propriété?Ce type est
@CustNumber
?Si je le suis, je suis tout à fait à une perte quant à l'endroit où ce serait. Je suis l'aide d'une corde sur le C#, pas de la taille de la déclaration. Je suis à l'aide d'un varbinary(32) dans le convertir. Défini la taille de la déclaration. Je suis à l'aide d'un varbinary(32) dans le tableau. Défini la taille de la déclaration. Je suis en ligne de SQL - commandText en Nlog pour exécuter cette requête, mais vous ne définissez pas le paramètre longueurs que je suis au courant pour Nlog. Je vais vérifier que...Ouais, pas de taille pour nlog.
OriginalL'auteur ClaytonHunt | 2012-05-09
Vous devez vous connecter pour publier un commentaire.
La raison en est que lorsque vous insérez vous êtes à la conversion Unicode (de type nvarchar(xx) chaîne de caractères de type varbinary. Ensuite, lorsque vous sélectionnez vous êtes à la conversion de type varchar(xx). Si vous convertir le type de données nvarchar(xx), cela fonctionnera très bien.
Par exemple:
en insérant 'ceci est un test' en tant que type varbinary(30) des résultats de 0x7468697320697320612074657374.
l'insertion de N ce est un test' en tant que type varbinary(30) des résultats de 0x74006800690073002000690073002000610020007400650073007400.
Ainsi, lorsque vous reconvertir, si vous spécifiez le type varchar(30) de la première 00 tronque la chaîne.
Cela fonctionne très bien pour moi:
et donc cela
Eh bien peut-être qu'il est dans l'autre sens, mais il est presque certainement une colonne varchar/nvarchar incompatibilité.
Si je ne fais pas de la CONVERTIR en mal, je pense que le problème réside dans NLog quelque part
Je corrige la position des mains, vous sir sont corrects. C'est de la magie. Merci de Ne suppose pas que vous savez comment obtenir NLog à utiliser VARCHAR?
Non désolé, je n'ai jamais utilisé NLog.
OriginalL'auteur Phil