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 15 týdnů
před 6 let 15 týdnů
před 6 let 36 týdnů
před 6 let 51 týden
před 7 let 11 týdnů
před 7 let 20 týdnů
před 7 let 21 týden
před 7 let 24 týdny
před 7 let 30 týdnů
před 7 let 39 týdnů