56 votes

Ado.net - la taille de la propriété a une taille invalide 0


J'essaie d'obtenir une valeur de sortie de la base de données via ADO.net. Il y a un code client:

     using (var connection = new SqlConnection(ConnectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand("pDoSomethingParamsRes", connection);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add("@i", 1);
        var outParam = new SqlParameter("@out", SqlDbType.VarChar);
        outParam.Direction = ParameterDirection.Output;
        command.Parameters.Add(outParam);
        command.ExecuteNonQuery();
        Console.WriteLine(command.Parameters["@out"].Value.ToString());
    }
 

Quand j'exécute ceci, j'obtiens l'exception suivante:

 the Size property has an invalid size of 0
 

Selon le manuel SqlParameter.Size Property, je pourrais omettre la taille. Pourquoi ai-je cette exception? Comment le faire fonctionner sans passer de taille?
Merci de votre aide!

59voto

Sachin Shanbhag Points 20979

VarChar et NVarChar sont des champs de caractère de largeur variable (donc var + char). Vous devez définir la longueur, sinon la valeur par défaut est zéro.

48voto

The King Points 2436

La taille du paramètre est requise pour les paramètres de sortie de taille variable. Généralement, ADO.NET décide de la taille du paramètre en fonction de la valeur affectée au paramètre (il est donc facultatif), mais dans le paramètre de sortie, aucune valeur n'étant définie, vous devez fournir la taille requise pour le paramètre.

Définissez la taille du paramètre sur la taille de la variable de sortie du DB ... Dites 50

 outParam.Size = 50;
 

18voto

Andrew Jens Points 228

Incidemment, la définition de la propriété size d'un paramètre de sortie est nécessaire même s'il ne s'agit pas d'un paramètre de type chaîne. Par exemple, si vous utilisez un System.Data.SqlDbType.Int, vous devez définir la taille sur 4.

9voto

Pranay Rana Points 69934

Vérifier la propriété MSDN: SqlParameter.Size

Pour les paramètres bidirectionnels et de sortie, ainsi que pour les valeurs de retour, vous devez définir la valeur de Size. Cela n'est pas requis pour les paramètres d'entrée et, si elle n'est pas explicitement définie, la valeur est déduite de la taille réelle du paramètre spécifié lorsqu'une instruction paramétrée est exécutée.

1voto

Andrew Harry Points 5488

Je ne suis pas sûr qu'il s'agisse du même problème que précédemment, mais utiliser un octet pour un paramètre peut parfois conduire à cette erreur.

Essaye ça. Déclarez explicitement le paramètre i en tant que variable. ALORS assigner sa valeur avec la propriété Value.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X