SqlCommand cmdResult1 = new SqlCommand(@"SELECT COUNT(vote) as NumVotes FROM pollVotes WHERE vote = 1", conn); SqlDataReader reader = cmdResult1.ExecuteReader();
while (reader.Read()) { return (int) reader["NumVotes"]; }
conn.Close();
} finally { }
}
Men jeg får en fejl: ikke alle kodestier returnerer en værdi
Jeg har testet min SQL sætning manualt og der kommer der et resultat ud, som det skal - nogen der kan foreklare mig hvad hulen jeg gør forkert?
sætter du koden op så du kan have flere forskellig udfald skal du uanset hvad returnere noget i samtlige tilfælde - hvis du er sikker på at din sql aldrig fejler etc skal du ikke pakke din kode ind i en try/catch og ellers skal du bare returnere noget i alle tilfælde.
Så min metode nu ser sådan her ud: protected int getResults() { SqlConnection conn = new SqlConnection(); conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; conn.Open();
SqlCommand cmdResult1 = new SqlCommand(@"SELECT COUNT(vote) as NumVotes FROM pollVotes WHERE vote = 1", conn); SqlDataReader reader = cmdResult1.ExecuteReader();
conn.Close();
while (reader.Read()) { return (int) reader["NumVotes"]; }
SqlCommand cmdResult1 = new SqlCommand(@"SELECT COUNT(vote) as NumVotes FROM pollVotes WHERE vote = 1", conn); SqlDataReader reader = cmdResult1.ExecuteReader();
while (reader.Read()) { y=(int) reader["NumVotes"]; }
Det virker - jeg skal bare blive bedre til at bruge try/catch/finaly noget mer eog rigtigt - det goder vi jo ikke rigtigt bruge i PHP verden, hvor jeg kommer fra ;-)
Hvis man skulle være helt korrekt omkring at rydde op, så bør man bruge en using til at håndtere det. De objekter der bliver brugt implementerer jo IDisposable, så man skal som programmør sørge for at kalde Dispose på dem. Det gør using for os... Så ender man med noget i stil med:
protected int getResults() { int y = 0; using (SqlConnection conn = new SqlConnection()) { conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; conn.Open(); using (SqlCommand cmdResult1 = new SqlCommand(@"SELECT COUNT(vote) as NumVotes FROM pollVotes WHERE vote = 1", conn)) { using (SqlDataReader reader = cmdResult1.ExecuteReader()) { while (reader.Read()) { y = (int)reader["NumVotes"]; } } } } return y; }
Hvis SQL returnerer 0 eller 1 række, så er forskellen ens, men hvis der kunne returneres flere rækker, så er det:
if(.Read()) { = } return
der svarer til:
while(.Read()) { return }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.