Hej! I sin enklaste form skulle det kunna se ut såhär: Använd gärna "finally" för att stänga databasanslutningen för att försäkra dig om att du inte öppnar massa databasanslutningar som bara lämnas åt sitt öde om ett fel uppstår. Nej, det borde jag ha förtydligat! :) Ville bara understryka att con.Close() måste köras oavsett om fel inträffar, och att det därför INTE är lämpligt att inkludera con.Close() i try-blocket. okej, tack så mycket :) Du måste deklarera SqlConnection-objektet INNAN try-blocket. Vänta därmed med att tilldela SqlConnection-objektet tills du är inne i try-blocket, i händelse att ett fel uppstår när Connection-objektet ska skapas/tilldelas. hmm, jag deklarerade SqlConnection utanför nu, men då fick jag istället Gör så här: tack, det var jag som hade klantat till mig märkte jag. Vad menar du?felhantering
Jag undrar om det finns någon väldigt vänlig person här inne på forumet som skulle kunna hjälpa mig att lägga till lite felhantering i mitt nyhetsscript. Jag läst att man kan använda sig utav Try and catch, datalager m.m. jag har läst och kollat på det men aldrig lyckats greppa hur man använder något av det så vore kul om någon kunde ta sig lite tid och lägga till en felhantering i mitt lilla nyhetsscript här så att jag får se hur det hela fungerar i praktiken, har en känsla av att allt skulle ramla ned då och jag skulle förstå hur det fungerar för märker att jag inte får ut direkt mycket mer av att sitta och läsa om det.
protected void Addnews()
{
SqlConnection cnn = new SqlConnection(strCon);
//Parametrar
SqlParameter subject = new SqlParameter("subject", txtSubject.Text);
SqlParameter news = new SqlParameter("news", txtNews.Text);
//SqlParameter author = new SqlParameter("Author");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "INSERT INTO news (subject, news]) " +
"VALUES (@subject, @news)";
cmd.Parameters.Add(subject);
cmd.Parameters.Add(news);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
lblStatus.Text = "Din nyhet har lagts till";
txtSubject.Text = "";
txtNews.Text = "";
}
Sv: felhantering
protected void Addnews()
{
try
{
SqlConnection cnn = new SqlConnection(strCon);
//Parametrar
SqlParameter subject = new SqlParameter("subject", txtSubject.Text);
SqlParameter news = new SqlParameter("news", txtNews.Text);
//SqlParameter author = new SqlParameter("Author");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = "INSERT INTO news (subject, news]) " +
"VALUES (@subject, @news)";
cmd.Parameters.Add(subject);
cmd.Parameters.Add(news);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
lblStatus.Text = "Din nyhet har lagts till";
txtSubject.Text = "";
txtNews.Text = "";
}
catch (System.Exception ex)
{
lblStatus.Text = "Något gick fel (" + ex.Message + ")";
}
}
/Johan
Sv:felhantering
try
{
SqlConnection con = new SqlConnection(connectioString);
con.Open();
GörLiteDatabasOperationer(); //Här uppstår ett fel, con.Close() anropas alltså inte här
con.Close();
}
catch(Exception ex)
{
string errorMessage = ex.Message;
}
finally //Körs efter att catch-blocket exekverats
{
con.Close();
}Sv:felhantering
Alltså behöver du con.Close() ENBART i finally-blocket!Sv: felhantering
antar att jag måste gå in med ett värde i finaly, efter som jag får följande fel:
Compiler Error Message: CS0103: The name 'cnn' does not exist in the current context
men, hur skriver jag det? jag har testat på lite olika sätt men inget har blivit rätt.
men för att spinna vidare lite på det här nyhetsscriptet så skulle jag vilja skriva ut det på ett speciellt sätt.
Det som så att jag vill skapa en egen artikel eller vad man säger. Jag ska försöka beskriva så bra som möjligt vad jag är ute efter.
På första sidan vill jag ha en kolumn med nyheter, där ska han hämta ut 5 stycken från databasen men jag vill inte att han ska skriva ut hela utan jag vill att nyheten ska avslutas efter x antal tecken, exempelvis 200.
Rubriken
nyheten med 200 som sedan avbryts
läs mer....
hur gör jag så att en nyhet avbryts efter 200 tecken och att man måste klicka på "läs mer" knappen för att få läsa hela nyheten. Använder mig som sagt av C# kod och skriver koden i en separat .cs fil. som leder mig till nästa fråga. nyhetsscriptet är uppbyggt i en tabell som loopas ut, går det att skilja all asp kod från html koden då eller krävs det jag har ett select script vid tabellen och inom varje <td> tagg skriven koden för att hämta ut respektive "sak" ur databasen?Sv:felhantering
Alltså:
SqlConnection cnn;
try
{
cnn = new SqlConnection()
.....
Om du max vill ha ett visst antal tecken från en sträng kan du använda SubString().
Exempel:
string Nyheten = "Här kommer en glad nyhet";
if(Nyheten.Length > 200)
string EnBitAvNyheten = Nyheten.SubString(0,200);Sv: felhantering
Compiler Error Message: CS0165: Use of unassigned local variable 'cnn'
Tack för "nedbrytningen av text" eller vad man ska kalla det!Sv:felhantering
SqlConnection cnn = new SqlConnection();
try
{
cnn.ConnectionString = "...";
...............
Vad bra att det löste sig med "nedbrytningen"! :)Sv: felhantering
men till att återgå till det som jag frågade om förut, hur delar jag upp en select sats i tabellkolumner.
Jag har tidigare kodat lite php och då gjorde jag så här:
echo '
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr bgcolor="#'.$bgcolor.'">
<td width="6%"><div align="center"></div></td>
<td width="6%"><div align="center"></div></td>
<td width="65%">' . $headline . '</td>
<td width="17%">' . $lastedit . '</td>
</tr>
</table>';
där $lastedit osv är variabler jag hämtar från databasen. men nu när jag kodar asp så använder jag mig utav en separat .cs fil där all kod ska ligga... hur löser jag en sån här sak när all asp kod ska ligga i .cs filer. Eller är det en omöjlighet så att jag måste blanda lite kod här?
Sv:felhantering
Publika variabler i .cs-filen kan du komma åt genom <% =dittvariabelnamn %> i din HTML-markup.
Men vad du menar med att "dela upp en select-sats" vet jag inte. Du kanske bör titta på en GridView om du vill binda en tabell i databasen till en tabelliknande presentation?