T-SQL (varchar(max) vs CLR (chaîne, Chaîne -, SqlChars)?
J'ai un problème, que je ne peux pas résoudre. Je suis à l'aide de SQL Server 2005, C# CLR pour l'aide extérieure de la dll. Le problème, c'est à longueur de paramètre. J'ai besoin de l'utiliser comme paramètre de fonction de type varchar(max)
. Si le code C# j'utilise string
, SqlSring
, je ne peux pas utiliser le T-SQL de type varchar(max)
, juste varchar(4000)
de nvarchar(4000)
. J'ai besoin de le dire, qui peuvent être des situations, quand j'ai besoin d'utiliser plus de 4000 symboles, donc j'ai besoin de savoir, quel type C# j'ai besoin d'utiliser pour varchar(max)
.
J'ai lu beaucoup d'articles, et plusieurs d'entre eux disent que je peux utiliser SqlChars
. Mais! J'ai les manipulations de chaînes de caractères. Comment puis-je avoir des actions avec string
ou SqlString
et ensuite de les convertir à SqlChars
? (Il est possible SqlChars.ToString()
ou SqlChars.ToSqlString()
).
Je n'ai pas trouvé de code C# pour cela.
- Un
varchar(max)
chaîne à l'aide de sa capacité maximale ne sera pas chargeable dans un CLR chaîne, car elle permettra l'évacuation de l'espace d'adressage. Pouvez-vous être plus explicite sur ce que les actions que vous voulez exécuter à l'encontre de ces chaînes? - - Je convertir SQL de type varchar et envoyer cette valeur à l'extérieur de la dll. Que, faire les manipulations avec des et de retour à SQL Server. Maintenant, j'utilise SQL/vchar(4000) et C#/chaîne. J'ai besoin de plus de 4000 symboles.
- J'étais sous l'impression à la fois de SQL Server
varchar(max)
ainsi que d'un .NETstring
exemple, pourraient être jusqu'à 2 GO en taille.... - comme il s'avère, une
varchar(max)
variable peut contiennent plus de 2 go. Mais j'ai surtout travailler de l'autre côté. Certainement sous 32 bits CLR, vous ne pouvez pas allouer un objet de 2 go, et je pense que vous pouvez la lutte encore sous 64 bits.
Vous devez vous connecter pour publier un commentaire.
Ce que vous devez faire est d'ajouter SqlFacet(MaxSize = -1) attribut de paramètre:
J'ai trouvé la réponse. Non seulement m'a demandé à propos de cette question. J'ai à lire les messages plus attentivement...
Pouvez lire ici http://social.msdn.microsoft.com/Forums/is/sqlnetfx/thread/391ebb98-e1b5-47fc-a72d-9f1e39829e3a le problème de La CLR compatibilité résout pas très difficile.
Tous les temps, j'ai voulu utiliser
varchar(max)
et essayé d'utiliser C# typesstring
,SqlString
,SqlChars
. Besoin d'utiliser des T-SQLnvarchar(max)
, et vous pouvez les utiliser C# typesstring
,SqlString
,SqlChars
!Bien sûr
nvarchar
prendre plus de place quevarchar
à deux reprises.VARCHAR
, si c'est 1 - 4000 ouMAX
.NVARCHAR
est le seul type de chaîne que le SQLCLR API passe à travers (enfin, je suppose queobject
/SQL_VARIANT
pouvez également passer une chaîne de caractères jusqu'à 4000). Si vous passez dansVARCHAR
valeurs, ils sont implicitement converti àNVARCHAR
. S'il vous plaît ne pas utiliser, ou proposer de l'aide,string
comme un SQLCLR d'entrée ou de sortie param type. Pour plus d'informations, veuillez voir ma série, Escalier SQLCLR, sur SQL Serveur Central (inscription gratuite est requise pour ce site).Essayez d'utiliser la longueur
-1
. Quelque chose comme ceci:-1
est techniquement correcte, cette réponse n'est toujours pas à la question. Cette réponse est de traiter avec une occurrence de SqlConnection de l'API et de ne pas le SQLCLR API.