Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
есть код: try { SqlConnection connection = new SqlConnection(connectionString); ... connection.Open(); try { command.ExecuteScalar(); } catch (Exception ex) { ... } finally { connection.Close(); } } catch (Exception e) { ... } return success; в нем как видно есть 2 try-catch вложенных друг в друга лично мне это не нравится. в данном случае мне это кажется непрофессиональным. Что думаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 18:59 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
а у меня есть два if, вложенных друг в друга if (a > 0) { ... if (b>0) { } ... } Тоже считаете не профессиональным и предлагаете раскрыть скобки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 19:03 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
ваш пример не имеет связи с кодом о котором идет речь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 19:17 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
првильный ответ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Never ask users what they want, or they'll tell you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 19:24 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Артем, я с вами полностью согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 19:29 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Я бы сделал так... using(SqlConnection connection = new SqlConnection(connectionString)) { ... using(SqlCommand command = connection.CreateCommand()) { try { connection.Open(); command.ExecuteScalar(); } catch(Exception ex) { ... } finally { connection.Close(); } } } can be done... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 19:30 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Вложенные try catch не свидетельсвуют о непрофессионализме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 19:58 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
ZeusTheTrueGodВложенные try catch не свидетельсвуют о непрофессионализме да. но лишние... 2BoyStav , у тебя что паранойя? :) если делаешь Код: plaintext Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 20:21 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
2BoyStav И кстати SqlCommand не поддерживает IDisposable, так что и Код: plaintext ЗЫ: упрощать сложно - усложнять легко ;) _______________________________________________________ Never ask users what they want, or they'll tell you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 20:24 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
насчет паранойи согласен, вызов Close при условии использования using-а излишен. Но код Артема тоже грешит излишними исходными предпосылками, в конкретно этом простейшем случае этот код сработает:SqlConnection connection = new SqlConnection(connectionString); try { connection.Open(); command.ExecuteScalar(); } catch (Exception e) {} finally { connection.Close(); } Однако в реальном приложении в блоке try излишне ретивый программист вполне может написать так: connection.Close(); connection = null; А что может твориться в блоке catch вообще представить страшно. В результате мы получим исключение в блоке finally на ровном месте. Идеальный вариант - оборачивать SqlConnection в using, это будет защищенный от ошибок код by design. Однако этот оператор есть не во всех языках, соответственно можно использовать и вариант с finally но перед вызовом методов обязательно проверять существование объекта, а для класса SqlConnection неплохо бы еще и проверить его текущий статус. В итоге код выглядеть будет как-то так:SqlConnection connection = new SqlConnection(connectionString); try { //... connection.Open(); command.ExecuteScalar(); //... } catch (Exception e) {} finally { if (connection != null && connection.State == ConnectionState.Open) { connection.Close(); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 10:26 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
2Nisus, твой код конечно выглядит лучше, но речь то шла не о том как правильно закрыть коннект, а о лишних блоках try...catch _______________________________________________________ Never ask users what they want, or they'll tell you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 11:15 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
ZeusTheTrueGod , иногда свидетельствует. у МС даже вопросы на эту тему есть в дополнение к коду Артема, я бы предложил в final блок поставить еще 1 try-catch для проверки закрытия конекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 11:21 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Обсасывали уже эту тему здесь http://www.gotdotnet.ru/Forums/Data/117159.aspx?page=2147483647 -- Если тебе помогли, незабудь сказать спасибо -- -- Это всё мое личное мнение которое может не совпадать с Вашим или может быть ошибочным -- .NetCoder ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 14:20 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Nisus, Вы писали: N>Идеальный вариант — оборачивать SqlConnection в using, это будет защищенный от ошибок код by design. Однако этот оператор есть не во всех языках, соответственно можно использовать и вариант с finally Ну, во-первых, как уже было замечено, SqlConnection не реализует IDisposable, так что обернуть его в using (...) не получиться хоть ты тресни. Во-вторых, using(...) -- это syntactical sugar для C#, в IL всё равно конструкция разворачивается в try{...}finally{...}... << RSDN@Home 1.2.0 alpha rev. 650>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 11:50 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Ну во-первых, SqlConnection как раз наследует и замечательно реализует метод Dispose() интерфейса IDisposable, так что обернуть его в using(...) замечательно получится и трескать никого не придется. Для справки есть такой сайт MSDN, много интересного пишут http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatasqlclientsqlconnectionmemberstopic.asp Ну и во-вторых по большому счету все языки высокого уровня это синтаксический сахар по большому счету, в машинных кодах-то все равно все разворачивается в банальные операторы циклов, ветвления да перехода, плюс копирование с ячейки в ячейку да сложение ну и сдвиги по мелочи. А так я вообще-то тоже за try-finally, незачем упрощать себе жизнь, да и хорошая читаемость кода ни к чему хорошему еще не приводила, того и гляди коллеги подсидят. Автор: Spaider, 31.07.06 11:50 Тема: Re[2]: Критика кода Сообщение: Здравствуйте, Nisus, Вы писали: N>Идеальный вариант — оборачивать SqlConnection в using, это будет защищенный от ошибок код by design. Однако этот оператор есть не во всех языках, соответственно можно использовать и вариант с finally Ну, во-первых, как уже было замечено, SqlConnection не реализует IDisposable, так что обернуть его в using (...) не получиться хоть ты тресни. Во-вторых, using(...) -- это syntactical sugar для C#, в IL всё равно конструкция разворачивается в try{...}finally{...} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 12:10 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Nisus, Вы писали: N>Ну во-первых, SqlConnection как раз наследует и замечательно реализует метод Dispose() интерфейса IDisposable, так что обернуть его в using(...) замечательно получится и трескать никого не придется. Для справки есть такой сайт MSDN, много интересного пишут http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatasqlclientsqlconnectionmemberstopic.asp Нда, тут ошибочка вышла. Я, если честно, по быстрым вопросам не в MSDN лезу, а в Reflector. Вот тут и поленился раскрыть базовые интерфейсы для IDbConnection, не заметил, что он наследует IDisposable.... << RSDN@Home 1.2.0 alpha rev. 650>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 12:24 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
SpaiderНу, во-первых, как уже было замечено, SqlConnection не реализует IDisposable, так что обернуть его в using (...) не получиться хоть ты тресни. эээээ...читай внимательно, что было замечено! ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2006, 14:35 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
теперь по полкам... 1) IDisosible реализуется как SqlConnection так и SqlCommand. 2) Вызов close при оборачивании в using не излишен, так как освобождение ресурсов не гарантирует закрытие соединения (хотя скорее всего закрывает). 3) падение на close в блоке finally маловероятно, и если оно произошло, то это надо ловить гораздо выше и очень сильно задуматься над причиной данного инцендента.can be done... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 15:21 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
BoyStav 1) IDisosible реализуется как SqlConnection так и SqlCommand. Хоть SqlCommand и наследует IDisposable, но реализирует его, класс Component, от которого SqlCommand наследуеца (если не ошибаюсь это нужно для дизайнера). Но никакой логики SqlCommand в Dispose не добавляет, так что оборачивать его в using совершенно не нужно BoyStav 2) Вызов close при оборачивании в using не излишен, так как освобождение ресурсов не гарантирует закрытие соединения (хотя скорее всего закрывает). а вот другое дело с SqlConnection. Этот класс переопределяет метод Dispose(bool disposing) и добавляет свою логику, которая разрешает нам использовать using для коректного закрытия соединения. Так что "Вызов close при оборачивании в using" излишен . Нафига тогда нам вообще using использовать?! Вот кстати как он реализирован Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. BoyStav 3) падение на close в блоке finally маловероятно, и если оно произошло, то это надо ловить гораздо выше и очень сильно задуматься над причиной данного ну а с этим согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 16:07 |
|
||
|
Критика кода
|
|||
|---|---|---|---|
|
#18+
не имею привычки разбирать стандартные библиотеки... но спасибо за разяснения, пункт 1 по боку, всеравно буду оборачивать :) сейчас ничего нет, потом будет... :) А по поводу пункта 2 вобще громадное спасибо, теперь я буду уверен что там есть закрытие соединения ( я и так был правктически уверен ), но как говориться береженого бог бережет :)can be done... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2006, 16:21 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33883407&tid=1391004]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 352ms |

| 0 / 0 |
