Představte si následující kód, ve kterém je využíváno jediné
připojení k databázi (detaily jsou vynechány):
reader = command.ExecuteReader();
while (reader.Read()) {
...
updateCommand.ExecuteNonQuery();
...
}
Tento kód skončí výjimkou „There is already an open DataReader
associated with this Command which must be closed first“.
První věcí je, že popis výjimky moc vývojáři nepomůže. Zpráva
totiž napovídá, že je s jedním Commandem asociováno víc
DataReaderů, což ale na první pohled není pravda – jediný otevřený
DataReader je asociován s objektem command
, který není
totožný s objektem updateCommand
. Navíc vykonáváme
ExecuteNonQuery a žádného DataReadera nevytváříme. Pro začátečníka
mého typu je tedy hláška zcela k ničemu, naopak je spíše matoucí.
(V souvislosti s tím doporučuji shlédnout skvělý track
PRS223: Getting Users to Fall in Love with Your Software:
2005 Edition z videí z PDC 05, kde se
na téma zbytečných hlášek pobavíte a poučíte zároveň.) Jen pro
úplnost poznamenám, že hláška svůj smysl má, protože oba objekty command
jsou propojeny přes objekt Connection a DataReader se vytváří i při
ExecuteNonQuery, protože tento příkaz vrací počet ovlivněných řádků.
Ale to je celkem jedno, hláška prostě dobrá není.
před 6 let 25 týdnů
před 6 let 25 týdnů
před 6 let 47 týdnů
před 7 let 9 týdnů
před 7 let 22 týdny
před 7 let 30 týdnů
před 7 let 32 týdny
před 7 let 35 týdnů
před 7 let 41 týden
před 7 let 50 týdnů