web-dev-qa-db-fra.com

Comment créer NVarchar (max) Sqlparameter en C #?

J'ai le code suivant pour retirer un DataTable en utilisant une procédure stockée et en entrant un paramètre de chaîne @JobNumbers, qui est une chaîne de numéros de travail créée dynamiquement (et donc la longueur est inconnue):

using (SqlConnection connection = new SqlConnection(con))
        {
            SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
            cmd.Parameters["@JobNumbers"].Value = JobNumber;

            SqlDataAdapter da = new SqlDataAdapter(cmd);

            connection.Open();
            da.Fill(JobDetails);
        }

Comme vous pouvez le voir, j'ai actuellement défini le paramètre JobNumber sur une longueur de 4000, ce qui devrait être suffisant pour prendre environ 500 numéros de travail et devrait être suffisant. Cependant, il est possible qu'il en ait besoin de plus à l'occasion. Donc, je me demandais, est-il possible de définir le paramètre sur le type de paramètre sql équivalent de nvarchar (max)?

J'ai jeté un coup d'œil à diverses questions similaires ( Quelle est la meilleure méthode pour passer des paramètres à SQLCommand? ) mais aucune ne dit spécifiquement si vous pouvez (ou ne pouvez pas) faire cela. Deuxièmement, est-il même nécessaire de le faire si je définis le paramètre @JobNumber dans la procédure stockée sur nvarchar (max) et que je n'aurais donc probablement pas besoin de définir la longueur en C #? Si je fais cela, cela aura-t-il des problèmes de performances potentiels comme suggéré dans cette question Quand "SqlDbType" et "size" devraient-ils être utilisés lors de l'ajout de paramètres SqlCommand? ?

25
sr28

Voici comment vous définissez explicitement nvarchar (max):

cmd.Parameters.Add("@JobNumbers", SqlDbType.NVarChar, -1);

Si vous êtes vraiment préoccupé par les performances, vous voudrez peut-être envisager de passer une table d'entiers: https://stackoverflow.com/a/10779593/465509

70
Sam7