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 5 let 29 týdnů
před 5 let 29 týdnů
před 5 let 50 týdnů
před 6 let 13 týdnů
před 6 let 25 týdnů
před 6 let 34 týdny
před 6 let 35 týdnů
před 6 let 38 týdnů
před 6 let 44 týdny
před 7 let 1 týden