Hej igen! Hej Janne. Bara för att förtydliga Bennis svar (hoppas du inte misstycker): Tack, jag behövde nog ett förtydligande. Anledningen att du när du kör lokalt fastnar på raden med "SqlDataSource1.Insert()" och att den markeras kan jag tänka mig är att ditt Visual Studio är inställt på breaka så fort ett Exception slängs i din kod -- minns inte riktigt hur/var man ställer in det, men om så är fallet borde det gå att fortsätta köra applikationen efter den breakat (borde finnas en blå play-knapp?). Hej! Nu har jag faktiskt löst det, men jag fick inte till det med InvalidOperationException, utan med Exception och jag var tvungen att flytta bort redirecten från Try-satsen och flytta den till finally. Så här ser det ut nu: Jag anser att det är så här det skall se ut. Så bra!Kontrollera databaskoppling
Jag är ny på asp.net 2.0 i VB som ni kanske förstår och har en liten fråga igen.
Jag har ett anmälningsformulär och när man klickar på skicka-knappen, så ska uppgifterna insertas i databasen och det fungerar jättebra med SqlDataSource1.Insert(). Men jag skulle vilja lägga in en kontroll på om det finns kontakt med databasen först och om det inte gör det så ska det skickas ett mail till mig så att jag får veta det. Anmälaren ska hamna på sidan Fel.aspx.
Om databaskopplingen fungerar som den ska, så ska inserten ske och ett bekräftelsemail gå till anmälaren och denne ska hamna på sidan Tack.aspx.
Väldigt tacksam över lite vägledning på det här! Jag skickar med min insert och mail-skickningskod.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If IsValid Then
SqlDataSource1.Insert()
Response.Redirect("Tack.aspx")
Dim errormail As New MailMessage()
errormail.From = New MailAddress("webform@min.se")
errormail.To.Add("minmail@min.se")
errormail.Subject = "Misslyckad anmälan"
errormail.Body = "Namn: " & Me.fornamn.Text & " " & Me.efternamn.Text & Environment.NewLine
errormail.Body = errormail.Body & "Ort: " & Me.ort.Text
Dim smtp As New SmtpClient("xxx.xx.x.xxx")
smtp.Send(errormail)
End Sub
/JaneSv: Kontrollera databaskoppling
I det här läget så skulle jag köra en try abd catch.
<code>
try
{
//här lägger du in din insert
}
catch(Exceptionfel)
{
//någonting gick fel du kan skicka ett mail och tar du med fel(Exception) i ditt mail så får du veta orsaken
}
Jag hoppas att detta kan hjälpa dig.Sv:Kontrollera databaskoppling
If IsValid Then
Try
SqlDataSource1.Insert()
Response.Redirect("Tack.aspx")
' ta som regel att vara specifik i fångandet av exceptions
Catch ex As InvalidOperationException
Dim errormail As New MailMessage()
errormail.From = New MailAddress("webform@min.se")
errormail.To.Add("minmail@min.se")
errormail.Subject = "Misslyckad anmälan"
errormail.Body = "Namn: " & Me.fornamn.Text & " " & Me.efternamn.Text & Environment.NewLine
errormail.Body = errormail.Body & "Ort: " & Me.ort.Text & Environment.NewLine
errormail.body &= "Orsak: " & ex.Message
Dim smtp As New SmtpClient("xxx.xx.x.xxx")
smtp.Send(errormail)
response.redirect("Fel.aspx")
End Try
End If
Sv: Kontrollera databaskoppling
Det här blev lite knepigt för först fungerade det jättebra, men så la jag till att det ska komma ett bekräftelsemail också om det är så att inserten gått bra. Efter det, så kommer det bara ett mail när inserten gått bra, men inte om den misslyckas. Jag kör mot en Access-databas, så det är ju lätt att kolla genom att sätta tabellen i designläge, men då kommer bara den "gula sidan" upp och felmeddelandet står där och inget felmail kommer. Raden med "SqlDataSource1.Insert()" är rödmärkt, så det är som om att det blir stopp där. Det här är när jag kör lokalt alltså. Om jag lägger upp det skarpt, så kommer jag till Fel.aspx, men inget felmail kommer då heller.
Förresten vad är det för skillnad på InvalidOperationException och Exception? Går det att förklara?
If IsValid Then
Try
SqlDataSource1.Insert()
Dim mail As New MailMessage()
mail.From = New MailAddress("webform@min.se")
mail.To.Add(Me.epost.Text)
mail.Subject = "Bekräftelse på anmälan till mailtestseminarier iis-prod"
mail.Body = "Namn: " & Me.fornamn.Text & " " & Me.efternamn.Text & Environment.NewLine
mail.Body = mail.Body & "Organisation: " & Me.organisation.Text & Environment.NewLine
mail.Body = mail.Body & "Ort: " & Me.ort.Text & Environment.NewLine
mail.Body = mail.Body & "Välkommen! "
Dim smtp As New SmtpClient("xxx.xx.x.xxx")
smtp.Send(mail)
Response.Redirect("Tack.aspx")
Catch ex As InvalidOperationException 'Exception
Dim errormail As New MailMessage()
errormail.From = New MailAddress("webform@min.se")
errormail.To.Add("min@min.se")
errormail.Subject = "Misslyckad anmälan"
errormail.Body = errormail.Body & "Ort: " & Me.ort.Text & Environment.NewLine
errormail.Body = errormail.Body & "Orsak: " & ex.Message
Dim smtp2 As New SmtpClient("xxx.xx.x.xxx")
smtp2.Send(errormail)
Response.Redirect("~/error/Fel.aspx")
End Try
End If
/JaneSv:Kontrollera databaskoppling
Skillnaden mellan Exception och InvalidOperationException (eller godtycklig annan Exception) är att de senare alla ärver av Exception. Skriver man en Catch var As Exception kommer den fånga ALLA exceptions, oavsett vad den bakomliggande orsaken är -- vilket i regel inte är det man vill egentligen.
Istället bör man kika på vilka fel man kan tänkas råka ut för, och se till att parera dem på korrekt sätt
Låter märkligt att felmailet inte kommer fram -- du har inte möjlighet att kika i mailserverns logfil om det står nåt där?
Ex:
Try
Dim bar As Integer = 0
Dim foo As Integer = CInt(1 / bar)
Dim dbConn As New SqlClient.SqlConnection("minserver.com")
Catch ex As Exception
Console.WriteLine("Oj det gick inte att ansluta till databasen")
' felaktig slutsats
End Try
Bättre ex:
Try
Dim bar As Integer = 0
Dim foo As Integer = CInt(1 / bar)
Dim dbConn As New SqlClient.SqlConnection("minserver.com")
Catch ex As OverflowException
Console.WriteLine("Oj det gick inte att dividera med noll (idag heller)")
Catch ex As ArgumentException
Console.WriteLine("Oj din connectionstring var ju inte rätt formaterad")
Catch ex As SqlClient.SqlException
Console.WriteLine("Oj SQLservern blev visst lite arg")
End Try
Sv: Kontrollera databaskoppling
Det är en webbapplikation jag har så när jag testkör kör jag ju i webbläsaren lokalt mha Visual Studios inbyggda webbserver. Det är Visual Studio 2005 jag har.
Det är när jag använder InvalidOperationException, som programmet stannar på
"SqlDataSource1.Insert()". Om jag använder bara Exception får jag errormailet ovasett om databasen fungerar eller inte. Om databasen fungerar står det som orsak: Tråden höll på att avbrytas.
Dessvärre har jag inte åtkomst till logfilen.
Ska man måste göra en separat connection till databasen före "SqlDataSource1.Insert()" och lägga in try-catch där, för det är ju enbart databaskontakten jag vill kolla särskilt? Och hur gör man det i så fall?
Det är så irriterande att det ska vara så krångligt att få till en sån här simpel grej. Känns som om jag ger upp med .net snart.
/JaneSv: Kontrollera databaskoppling
If IsValid Then
Try
SqlDataSource1.Insert()
Catch ex As Exception 'InvalidOperationException
Dim errormail As New MailMessage()
errormail.From = New MailAddress("webform@min.se")
errormail.To.Add("jag@min.se")
errormail.Subject = "Misslyckad anmälan till seminarier "
errormail.Body = errormail.Body & "Ort: " & Me.ort.Text & Environment.NewLine
errormail.Body = errormail.Body & "Orsak: " & ex.Message
Me.fel.Value = ex.Message
Dim smtp As New SmtpClient("xxx.xx.x.xxx")
smtp.Send(errormail)
Response.Redirect("~/error/Fel.aspx")
Finally
If Me.fel.Value = "" Then
Dim mail As New MailMessage()
mail.From = New MailAddress("webform@min.se")
mail.To.Add(Me.epost.Text)
mail.Subject = "Bekräftelse på anmälan till ..."
mail.Body = mail.Body & "Ort: " & Me.ort.Text & Environment.NewLine
mail.Body = mail.Body & "Välkommen! "
Dim smtp2 As New SmtpClient("xxx.xx.x.xxx")
smtp2.Send(mail)
Response.Redirect("Tack.aspx")
Else
Response.Redirect("~/error/Fel.aspx")
End If
End Try
End If
Vad tyck? Är det godkänt, eller?Sv:Kontrollera databaskoppling
Ett litet tips, använd dig av formateringstaggarna när du skriver in kod här på forumet så blir det mycket
lättare att läsa och tyda det.Sv: Kontrollera databaskoppling
Ska försöka med formateringstaggarna nästa gång.
Tack för all hjälp