bonjour je construire un webservice en studio visuel 2010. Je reçois des id qui sont enregistrés dans une chaîne ressemble à ceci:Comment utiliser les chaînes dynamiques séparées par des virgules dans la requête sql?
string room_ids="5,11,99,42";
ils sont séparés par des virgules. J'ai créé une boucle foreach
pour séparer les identifiants et la virgule et les utiliser dans ma requête sql jusqu'à ce que les identifiants soient finis. mais ça ne marche pas. je reçois une erreur, il dit:
Error converting data type nvarchar to numeric
ici est mon code, merci d'avance pour votre aide!
internal static List<RAUM> Raum(string RAUMKLASSE_ID, string STADT_ID, string GEBAEUDE_ID, string REGION_ID)
{
List<RAUM> strasseObject = new List<RAUM>();
string[] allegebaude = GEBAEUDE_ID.Split(new char[] { ',' });
foreach (string gebaudeid in allegebaude)
{
Trace.WriteLine("SIND JETZT DRINNE");
Trace.WriteLine(gebaudeid);
using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
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) AND STADT_ID = ISNULL(@Stadt_ID, STADT_ID) AND GEBAEUDE_ID = ISNULL(@gebaudeid,GEBAEUDE_ID) AND REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{
con.Open();
if (!StringExtensions.IsNullOrWhiteSpace(RAUMKLASSE_ID))
cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
else
cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
if (!StringExtensions.IsNullOrWhiteSpace(STADT_ID))
cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
else
cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
if (!StringExtensions.IsNullOrWhiteSpace(GEBAEUDE_ID))
cmd.Parameters.AddWithValue("@gebaudeid", GEBAEUDE_ID);
else
cmd.Parameters.AddWithValue("@gebaudeid", DBNull.Value);
if (!StringExtensions.IsNullOrWhiteSpace(REGION_ID))
cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
else
cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["BEZEICHNUNG"] != DBNull.Value && rdr["ID"] != DBNull.Value)
{
strasseObject.Add(new RAUM()
{
RaumName = rdr["BEZEICHNUNG"].ToString(),
RaumID = rdr["ID"].ToString()
});
}
}
}
}
}
return strasseObject;
}
merci pour votre aide, j'ai un petit problème, je ne peux pas mettre le gebaudeid à vide, parce que ma chaîne est whith []. Comment puis-je resoudre ceci? –
Je ne suis pas sûr de comprendre. Vous ne faites rien avec 'gebaudeid'. Vous devez prendre la chaîne originale 'GEBAUDE_ID', séparée par des virgules, que vous avez transmise dans la fonction et l'utiliser simplement sans la diviser. Supprimez le bit de code qui sépare la chaîne en un tableau. –
cela fonctionne mais quand je laisse l'id de gebaude vide j'obtiens une erreur: Syntaxe incorrecte près de ')'. –