Jo nu är det så här, har ett bra skumt problem, kodar 99% bara i Java men har tagit på mig att hjälpa till med ett projekt och har stött på en skum sak.
Kanske någon här kan hjälpa mig.
Jag har följande:
Från toppen
Web Layer
Business Logic Layer
Data Access Layer
I Weblagret har jag en Gridview som man kan Edit:a en rad i och på så sätt göra en Update.
I BLL har jag koppling mot DAL via en Update funktion som ser ut som följer:
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
public bool UpdateTime(int original_time_id, int project_id, DateTime starttime, DateTime endtime, int pause, String description)
{
DateTime checkDate = DateTime.Today;
int rowsAffected = 0;
try
{
tidrapp.timeDataTable times = Adapter.GetTimeByTimeId(original_time_id);
if (times.Count == 0 \|\| this.containsError(starttime, endtime, project_id, "AnyOne"))
throw new Exception(); // No matching time found in database!
if((DateTime.Compare(starttime,checkDate.AddMonths(1)) \> 0) \|\| (DateTime.Compare(starttime,checkDate.AddDays(-checkDate.Day+1)) \< 0))
throw new Exception(); //Date out of bounds!
tidrapp.timeRow time = times\[0\];
//time.employee_id = employee_id;
time.project_id = project_id;
time.starttime = starttime;
time.endtime = endtime;
time.pause = pause;
time.description = description;
rowsAffected = Adapter.Update(time);
return rowsAffected == 1;
}
catch (Exception) { return false; }
}
Nu är det så att vi inte tillåter att vad som helst uppdateras och har därför ett par villkor om dessa inte uppfylls så vill vi neka det, meddela användaren samt stanna kvar i Edit mode.
Jag fann då att man kunde skapa en funktion som kördes efter en Update hade skett på datakällan.
if (e.Exception == null)
{
Response.Write("\<script language=javascript\>alert('Row updated successfully.');\</script\>");
}
else
{
e.ExceptionHandled = true;
Response.Write("\<script language=javascript\>alert('An error occurred while attempting to update the row.');\</script\>");
}
if (e.AffectedRows == -1)
{
Response.Write("\<script language=javascript\>alert('The date is out of bounds, +- one month!');\</script\>");
e.KeepInEditMode = true;
}
else
{
Response.Write("\<script language=javascript\>alert('Tjihoooo!');\</script\>");
}
}
TimesheetGridView_RowUpdated var precis vad jag sökte efter då jag nu uppe i Weblagret kan kommunicera med användaren med ex Javascipt alert.
Men problemet är som följer att argumentet e innehåller rowsAffected men den är alltid -1 och hur många Exceptions jag än kastar i BLL så är Exception = null i argumentet e.
Någon som kan förklara för mig hur jag från BLL kan få "False" med till weblagret så jag kan hantera det?
Först ett tips, använd tagarna för att göra din kod mer lätt läst..
puritan skrev:
Men problemet är som följer att argumentet e innehåller rowsAffected men den är alltid -1 och hur många Exceptions jag än kastar i BLL så är Exception = null i argumentet e.
Det är inte konstig att du aldrig får några exceptions från ditt BLL, du hanterar ju dessa själv...
try
{
...
rowsAffected = Adapter.Update(time);
return rowsAffected == 1;
}
//-- Här fångar du alla exceptions som kommer att inträffa inom din try-catch
catch (Exception) { return false; }
}
Det betyder ju att ditt BLL aldrig någonsin kommer att kasta några exceptions som ditt weblager kan fånga. Ta bort din catch-sats om du vill kunna kasta exceptions hela vägen upp.
Tyvärr så kan jag förlite om Gridviewns inbyggda datakontroller för att hjälpa dig med ditt problem om affectedrows
Men catch satsen måste ju finnas om jag ska ha en try annars kompilerar den inte. Frågan handlar mer om för mig vad en RowUpdated funktion egentligen tar med sig och gör.
Jag är ju van med att göra ett funktionsanrop som jag styr över själv nu ligger det i nån XML bakom allt låst till ett grafiskt objekt.
Hur som helst tar jag bort Catch-satsen så kompilerar den inte.
Du kan kasta vidare felet om du måste göra någon mellanhantering med att bara skriva throw; i catch.
Sedan så är det i princip aldrig okej att fånga felet med Exceptionklassen. Enligt praxis skall man inte fånga fel som man inte vet hur man skall hantera. Så släng det vidare sålänge du inte kan hantera det.
En annan sak du säger att du är från java i java har jag för mig att man måste ha try, catch runt sådant som kan kasta det, detta behövs inte i .net.
130 ms totalt · 3 externa anrop · v20260731065814-full.b746b907