Habituellement, ce n'est pas un problème de passer une string
en un paramètre numérique, tant que SQL Server est capable de convertir lui-même le contenu de la chaîne en une valeur numérique. Si cela ne fonctionne pas, vous obtenez cette erreur.
Par exemple :Passer "Hello"
à un paramètre numérique, vous obtenez une erreur. Passer "1234"
vous ne le faites pas. Veuillez noter qu'une chaîne vide ou une chaîne contenant des espaces ne peut pas être convertie en valeur numérique !
Cependant, il faut dire que ce n'est pas le bon style de faire cela. Vous devez vous assurer que les types que vous utilisez dans votre application correspondent aux types de la base de données pour éviter les problèmes. Peut-être quelques détails supplémentaires sur la raison pour laquelle vous avez besoin d'avoir string
types dans votre application pourraient vous aider.
MODIFICATION 1
Pour rendre un paramètre optionnel pour la requête, la marche à suivre serait la suivante :
- Modifiez votre instruction SQL pour autoriser des paramètres facultatifs tels que
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
. - Ne pas ajouter le
@Raumklasse_ID
paramètre s'il doit être facultatif ou ajouter la valeurDBNull.Value
Vous devriez vraiment envisager de changer votre string
propriétés aux types nullables comme int?
.
MODIFICATION 2
Voici à quoi pourrait ressembler votre code en implémentant les modifications que j'ai suggérées dans l'édition 1 :
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) OR STADT_ID = ISNULL(@Stadt_ID, STADT_ID) OR GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) OR REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{
con.Open();
if (!String.IsNullOrWhitespace(RAUMKLASSE_ID))
cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
else
cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(STADT_ID))
cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
else
cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(GEBAEUDE_ID))
cmd.Parameters.AddWithValue("@Gebaeude_ID", GEBAEUDE_ID);
else
cmd.Parameters.AddWithValue("@Gebaeude_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(REGION_ID))
cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
else
cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
...
}