La requête paramétrée ... attend le paramètre '@unités", qui n'a pas été fourni

Je suis de cette exception:

De la requête paramétrée '(@Nom de type nvarchar(8),@type nvarchar(8),@unités de type nvarchar(4000),@rang attend le paramètre '@unités", qui n'a pas été fourni.

Mon code pour l'insertion est:

public int insertType(string name, string type, string units = "N\\A", string range = "N\\A", string scale = "N\\A", string description = "N\\A", Guid guid = new Guid())
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand();
        command.CommandText = "INSERT INTO Type(name, type, units, range, scale, description, guid) OUTPUT INSERTED.ID VALUES (@Name, @type, @units, @range, @scale, @description, @guid) ";
        command.Connection = connection;
        command.Parameters.AddWithValue("@Name", name);
        command.Parameters.AddWithValue("@type", type);
        command.Parameters.AddWithValue("@units", units);
        command.Parameters.AddWithValue("@range", range);
        command.Parameters.AddWithValue("@scale", scale);
        command.Parameters.AddWithValue("@description", description);
        command.Parameters.AddWithValue("@guid", guid);
        return (int)command.ExecuteScalar();
    }
}

L'exception a été une surprise parce que je suis en utilisant le AddWithValue fonction et de faire assurer, j'ai ajouté un paramètre par défaut pour la fonction.

RÉSOLU:

Le problème est que certains paramètres, où les Cordes à vide (qui remplace la valeur par défaut)

C'est le code de travail:

public int insertType(string name, string type, string units = "N\\A", string range = "N\\A", string scale = "N\\A", string description = "N\\A", Guid guid = new Guid())
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand();
command.CommandText = "INSERT INTO Type(name, type, units, range, scale, description, guid) OUTPUT INSERTED.ID VALUES (@Name, @type, @units, @range, @scale, @description, @guid) ";
command.Connection = connection;
command.Parameters.AddWithValue("@Name", name);
command.Parameters.AddWithValue("@type", type);
if (String.IsNullOrEmpty(units))
{
command.Parameters.AddWithValue("@units", DBNull.Value); 
}
else
command.Parameters.AddWithValue("@units", units);
if (String.IsNullOrEmpty(range))
{
command.Parameters.AddWithValue("@range", DBNull.Value);
}
else
command.Parameters.AddWithValue("@range", range);
if (String.IsNullOrEmpty(scale))
{
command.Parameters.AddWithValue("@scale", DBNull.Value);
}
else
command.Parameters.AddWithValue("@scale", scale);
if (String.IsNullOrEmpty(description))
{
command.Parameters.AddWithValue("@description", DBNull.Value);
}
else
command.Parameters.AddWithValue("@description", description);
command.Parameters.AddWithValue("@guid", guid);
return (int)command.ExecuteScalar();
}
}
  • Vous avez oublié de mettre le @ que le premier caractère de chaque nom de paramètre.
  • Pourquoi le message d'erreur se plaindre @units plutôt que @Name, qui apparaît en premier?
  • Je suppose qu'il n'ont pas à chercher dans l'ordre où ils sont fournis.
  • Je suis choqué parce qu'encore personne n'a répondu à cette question. Par la voie, 2 upvotes?
  • J'ai ajouté le @ et encore même exception
  • Souhaitez-vous mettre à jour votre question avec votre code mis à jour, s'il vous plaît?
  • Oui, mis à jour...
  • Ahh, command.Parameters.AddWithValue("Name", @name) devrait être command.Parameters.AddWithValue("@Name", name) etc.
  • lol ok je vais vérifier que l'
  • Eh bien, toujours pas de travail. J'ai mis à jour mon code dans le message
  • pouvez-vous montrer ici script pour la création [Type] table?
  • Quelle est la valeur de units juste avant le "insertion"? Ne peut pas être null puisque vous spécifiez une valeur par défaut. Juste curieux de savoir si en quelque sorte l'une des valeurs de paramètre est à l'origine d'une étrange question.
  • Je soupçonne AddWithValue est de deviner quelque chose de mal. Essayez d'utiliser le SqlParameter Constructeur (String, SqlDbType, Int32).
  • ghost - je l'ai créé à partir de l'éditeur, ce que vous aimeriez savoir à propos de la table? @GrantWinney je pense qu'il peut être vide, alors que je suis de la vérification, nous allons supposer qu'il est, comment puis-je régler ce problème?
  • oui, ils sont tous vide (toutes les le avec par défaut)
  • double possible de La requête paramétrée attend le paramètre qui n'a pas été fourni

InformationsquelleAutor Yogevnn | 2014-05-03