Jobbar ofta med SP's som returnerar en INT som output parameter och jag kör ofta en SP som bara behöver returnera en INT och sedan kör jag en SP som returnerar queries. min huvudtanke bakom detta var att kunna hålla samma databaskoppling öppen och pipeline'a först en ExecuteNonQuery och sedan en ExecuteReader + att slippa skriva specialfall SP's då det ofta är olika varianter av den SP's.
Jag lägger till en output parameter med direction output och kör ExecutenonQuery men sedan kommer problemen med att lyckas få ut denna variabel till koden.
Vill egentligen göra föjande:
SqlParameter p = new SqlParameter("@RetVal", SqlDbType.Int);
p.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p);
conn.Open();
cmd.ExecuteNonQuery();
if ((int)cmd.Parameters["@RetVal"].Value != 1)
Men då får jag illegal cast som fel när sidan körs.
Att köra
känns dummt och jag tror inte ens det fungerade när jag provade.
Den enda lösningen jag fått att fungera idag känns inte direkt snygg och ser ut såhär:
cmd.Parameters["@RetVal"].Value.ToString() != "1"
Några förslag på hur detta kulle kunna lösas på ett snyggare och effektivare sätt? Jag vill fortsätta ha två SP's på varandra för att slippa skriva fyrdubbel uppsättning med SP's.
Om du använder dig av .NET 2.0 så finns det numerar en Int.TryParse() som returnerar true/false om det kunde omvandlas till en int.
Om du kör med .NET 1.1 så får du fortsätta med din ToString() eller göra en Int.Parse() inom en try-catch, och om du får ett fel så kör du koden i ditt catch-block, om det fungerar så kan du köra koden i ditt try-block.
det sista är dock inget som rekomenderas, då det är ett felaktigt sätt att använda sig av Exceptions.
jag kör .NET 2.0. Förstår inte MS fixering vid strängar, jag vet ju att det är en int som jag får tillbaka så varför skulle jag egentligen inte få kasta om den. Vet inte hur prestandan blir i slutändan men det känns ju alltid bättre att tolka objektet som en int direkt istället för typomvandla två gånger alternativt en gång och sedan göra en strängjämförelse.
305 ms totalt · 4 externa anrop · v20260731065814-full.87ef1719