Quoi utiliser pour la Taille de l'argument dans la Base de données.AddOutParameter au moment de retourner une chaîne de caractères?

Je reçois une chaîne de caractères comme paramètre de sortie, et ont besoin de savoir quels réglages pour la Taille de l'argument dans l'appel à AddOutParameter.

Je sais que je pourrais simplement utiliser un grand nombre, comme int.MaxValue, mais souhaitez connaître les meilleures pratiques.

Dans SQL Server, la colonne est en fait un type uniqueidentifier. L'instruction T-SQL exécutée insère un enregistrement, puis définit quelques variables de sortie à l'IDENTIFIANT et au GUID de la nouvelle enregistrements insérés. C'est le code que j'utilise, mais avec les noms de variable changé.

database.AddOutParameter(cmd, "@someInt", DbType.Int32, 0);
database.AddOutParameter(cmd, "@someString", DbType.String, 0);

database.ExecuteNonQuery(cmd);

someInt = (int)database.GetParameterValue(cmd, "@someInt");
someString = database.GetParameterValue(cmd, "@someString").ToString();

Lorsqu'il est exécuté, j'obtiens l'erreur suivante...

Système.InvalidOperationException: String[2]: la Taille de la propriété a une défaillance de la taille de 0.

Il est donc évident pour moi que vous ne pouvez pas simplement utiliser une taille de 0 avec un paramètre de sortie de chaîne. Vous pouvez le faire avec un Int32 paramètre de sortie, mais je suppose que la chaîne a besoin d'une taille valide. Alors, quelle est la meilleure pratique pour le réglage de la taille? Peut-il seulement être d'une taille énorme, sans affecter les performances à tous? Je peux juste régler int.MaxValue ou quelque chose? Est-il une constante peut être utilisée ici; (ne pas voir n'importe quelle Chaîne.MaxValue - vous pouvez sans doute dire que je suis nouveau sur C#, Java).

Devrais-je savoir ce que la taille maximale d'une colonne de type uniqueidentifier est et de définir la taille? Mais si je fais la même chose pour une colonne de type VARCHAR ou NVARCHAR?

Je souhaite que le cadre serait juste de le faire pour moi; je ne veux pas de spécifier une taille pour toutes les chaînes que je reçois en tant que sortie. N'importe qui ont des suggestions de meilleure pratique?

J'ai lu les messages ci-dessous, ainsi que la documentation MSDN, mais il n'y a pas vraiment de bonnes pratiques, de répondre à ce que j'ai trouvé encore.

AddOutParameter - non-magiques nombre moyen de trouver la longueur de DBType.Int32

Lire VARBINARY(MAX) à partir de SQL Server, C#

Dans SQL Server, la colonne est en fait un type uniqueidentifier ensuite, pourquoi ne pas simplement utiliser DbType.Guid au lieu d'un DbType.Chaîne
Bon commentaire. Je ne savais pas qu'il était un DbType.Guid. Je cherchais DbType.UniqueIdentifier ou quelque chose comme ça, et doivent avoir regardé à droite après le type de Guid. Mes yeux doivent être en train de vieillir. Merci un milliard de dollars! Je l'ai essayé et je peux définir la taille à 0 lors de l'utilisation de DbType.Guid et il n'y a aucune exception d'exécution. Pourtant si, je voudrais savoir si j'ai été d'obtenir des données à partir d'une colonne de type VARCHAR ou NVARCHAR, quelle est la meilleure pratique pour le réglage de la taille?
avec Varchar et NVarchar j'ai l'habitude de le faire correspondre quelle que soit la source de colonne ou de la variable taille est. Ses quand le Type n'est pas la carte qui est une douleur. Par exemple, si l'on n'avait pas le DbType.Guid. Je pense que j'ai eu un problème avec la lecture de SQL Server Guid dans Access 95
N'est-ce pas la taille de l'argument censé être en octets? Donc, si j'ai un NVARCHAR(50) de la colonne qui pourrait détenir des caractères multi-octets, n'ai-je pas de définir la taille est supérieure à 50? Et savez-vous si il n'y a aucune différence de performances (ou problème causé par) la définition de la taille juste d'être significativement plus élevé que vous seriez jamais besoin, comme à l'int.MaxValue?

OriginalL'auteur Jim | 2012-06-01