Hej.. jag undrar om ngn vänlig person kan visa hur jag kan lägga till felhantering i det här nyhetsscriptet, jag har sökt på google osv men jag förstår inte riktigt hur jag ska använda det i mitt nyhetsscript så skulle underlätta väldigt mycket om någon kan visa hur det fungerar genom att lägga till try and catch satser..
public partiar class
private string strCon = @"Data Source=localhost;Initial Catalog=Projekt;User ID=user;Password=pass";
protected void Addnews()
SqlConnection cnn = new SqlConnection(strCon);
//Parametrar
SqlParameter subject = new SqlParameter("subject", txtSubjekt.Text);
SqlParameter text = new SqlParameter("text", txtNews.Text);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "INSERT INTO test (subject, [text]) " +
"VALUES (@subject, @text)";
cmd.Parameters.Add(subject);
cmd.Parameters.Add(text);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
lblStatus.Text = "Din nyhet har lagts till";
txtSubjekt.Text = "";
txtNews.Text = "";
butikoMedlem sedan jan. 2007152 inlägg En enkel try-catch kan se ut så här:
try {
cmd.ExecuteNonQuery();
}
catch (Exception ex) {
// variabeln ex innehåller ditt felmeddelande
}
hur vet jag vad jag ska sätta som try och catch?
och hur gör jag med
cmd.CommandText = "INSERT INTO test (subject, [text]) " +
"VALUES (@subject, @text)";
kan jag i try and catch t.ex. kontrollera om det står något värde i de där två kolumnerna eller måste jag göra det med en if sats någon annanstans i koden?
samt vad gör catch i föregående exempel.. try förstår jag men inte riktigt catch med Exception ex, vad är det för något t.ex.?
PeddaMedlem sedan juni 20006 032 inlägg Enkelt förklarat
try {
// kod som ska försöka köras, t.ex lägga in något i databasen
}
catch(Exception error) {
// fångar felmeddelandet, kan t.ex skrivas ut i en messagebox
MessageBox.Show(
"Något gick fel!\n\n" + error.Message,
"Felmeddelande",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally {
// kod som alltid ska köras, t.ex close() på databasconnection
minDBConn.Close();
}
/red. Mitt exempel kanske inte var perfekt för ASP.NET men du förstår nog principen ;)
emissionMedlem sedan dec. 19996 721 inlägg
smileenergy skrev:
kan jag i try and catch t.ex. kontrollera om det står något värde i de där två kolumnerna eller måste jag göra det med en if sats någon annanstans i koden?
Nej, du varken kan eller ska. Förväntade fel och validering av indata ska inte göras mha try-catch, utan hanteras av egen programlogik (t.ex. en if-sats).
ska jag göra en try and catch för varje liten kod som ska försökas köras för då blir det väldigt många eller ska jag göra en stor, kan ingen visa med nyhetskoden som jag skickade med där uppe i första inlägget.. det skulle beskriva det hela rätt bra antar jag.
VictorYMedlem sedan dec. 2004135 inlägg
smileenergy skrev:
ska jag göra en try and catch för varje liten kod som ska försökas köras för då blir det väldigt många eller ska jag göra en stor, kan ingen visa med nyhetskoden som jag skickade med där uppe i första inlägget.. det skulle beskriva det hela rätt bra antar jag.
Alltså, en sak bara: Det är ingen idé att fånga exceptions om man ändå inte kan/tänker göra något vettigt med dem. Innan du börjar lägga in try-catch-grejer överallt bör du tänka över vad du vill uppnå. Ofta är det väl lika bra att bara låta den, "exceptionen", gå. Då får du ju ett vettigt felmeddelande när något händer.
butikoMedlem sedan jan. 2007152 inlägg
smileenergy skrev:
ska jag göra en try and catch för varje liten kod som ska försökas köras för då blir det väldigt många eller ska jag göra en stor, kan ingen visa med nyhetskoden som jag skickade med där uppe i första inlägget.. det skulle beskriva det hela rätt bra antar jag.
Stopp stopp stopp! Du ska bara göra en try/catch runt sådan kod där fel kan uppstå utan att du själv har någon möjlighet att påverka utfallet! Som emission skriver så ska förväntade fel och validering hanteras med egen programlogik.
I ditt exempel så kan vara rätt att ha en try/catch när du ställer en fråga till databasen eftersom det där kan uppstå fel som du inte kan hantera på något annat sätt. Men ett ännu bättre sätt är att göra ett datalager och i detta använda using (sök på webforum, finns säkert trådar om det här).
Att ha ett try catch runt ett helt kodblock är helt fel approach. Du ska inte laga rymskepp med tejp!
butiko skrev:
Stopp stopp stopp! Du ska bara göra en try/catch runt sådan kod där fel kan uppstå utan att du själv har någon möjlighet att påverka utfallet! Som emission skriver så ska förväntade fel och validering hanteras med egen programlogik.
I ditt exempel så kan vara rätt att ha en try/catch när du ställer en fråga till databasen eftersom det där kan uppstå fel som du inte kan hantera på något annat sätt. Men ett ännu bättre sätt är att göra ett datalager och i detta använda using (sök på webforum, finns säkert trådar om det här).
Att ha ett try catch runt ett helt kodblock är helt fel approach. Du ska inte laga rymskepp med tejp!
jag har sökt och hittat lite svar på datalager, men using, vad innebär det?
skulle kännas bra om någon kunde posta ett praktiskt exempel hur man löser något sånt här med ett datalager då, en tråd lr ngt som visar för jag verkar ju inte hitta och vill gärna se hur det fungerar i praktiken då jag har rätt svårt för att förstå då någon bara försöker förklara hur bra förklaringen än är så det lättare att lära sig om man ser hur man kan lösa det.