Det kan de vel også hvis din app håndterer exception fornuftigt.
Og den situation skal du jo håndtere alligevel (ihvertfald hvis du skal kunne klare mere end en samtidig bruger - fordi du kan riskere at 2 begge laver SELECT inden de begge forsøger at lave INSERT
Brugerne sidder med ordren foran sig på papir og taster den ind, så de vil aldrig rette i den samme ordre samtidig.
Det er bare for at fortælle brugerne at de har oprettet ordren i mit system engang så det ikke bliver dobbeltarbejde eller for at fortælle dem at de har trykket på knappen 2 gange.
Det ideelle ville være denne funktion på gem knappen:
Tjekker om alle felter er fyldt ud hvis nej: LblFejlGem - du skal udfylde ........... Hvis ja: Tjekker om ordre nummer eksisterer Hvis ja: LblFejlGem - Ordre er allerede gemt ellers Indsætter i Db end if end if
try 'insert statements catch ex as exception lblfejlgem.text= "Der er opstået en fejl: "+ ex.ToString() finally 'if "der ikke er en exception" then objComm = New OLEDBcommand(strSQL, objConn) objComm.ExecuteNonQuery() objConn.Close() 'end if end try
Nu fik jeg det til at virke: try 'insert statements catch ex as exception objComm = New OLEDBcommand(strSQL, objConn) objComm.ExecuteNonQuery() catch ex as exception LblFejlGem.text = ex.ToString() Finally objConn.Close() end try
Men brugeren forstår nok ikke meget af: System.Data.OleDb.OleDbException: De ønskede ændringer af tabellen blev ikke gennemført, fordi de ville give dublerede værdier i indekset, den primære nøgle eller relationen. Rediger dataene i det eller de felter, der indeholder dublerede data, fjern indekset, eller omdefiner indekset, så dublerede indtastninger tillades, og forsøg igen. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery() at ASP.tabel_aspx.BtnGem_Click(Object sender, EventArgs e) in U:\IT\Projekt program\Program\side.aspx:line 756
Jeg vil gerne fange hvilken type exception det er - for hvis jeg bare skriver: "Ordren er allerede oprettet" så kommer den jo også frem selvom det ikke er det der er fejlen.
Jeg løste den selv med: try //insert statements objComm = New OLEDBcommand(strSQL, objConn) objComm.ExecuteNonQuery() catch exc as system.exception If instr(1, exc.message, "duplicate data") then LblFejlGem.text="Du har allerede gemt denne ordre - Tryk rediger for at rette ordren" else LblFejlGem.text= "Du har fået en fejl: <br /> <br />" + exc.ToString() end if Finally objConn.Close() end try
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.