![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
В названии темы ошибка, тут говорится о неявном преобразовании))) Такая ошибка:
'object': type used in a using statement must be implicitly convertible to 'System.IDisposable'
Это сообщение отредактировал(а) ДобренькийПапаша - 13.8.2009, 13:35 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
А вопрос в чем? Object - не может быть сконвертирован в IDisposible, он не реализует этот интерфейс, SqlDataReader - реализует. Добавлено через 3 минуты и 47 секунд Из стандарта C#
Это сообщение отредактировал(а) azesmcar - 13.8.2009, 13:38 |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Это я уже понял)))
А решение какое? -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
||||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Если не использовать using то открытое соединение не закроется(((
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Не нравиться мне эта функция..Вызывающий должен точно знать, что возвращает функция, то она значение возвращает, то SqlDataReader.
Но если функция должна возвращать object - тогда сделай приведение типа (впрочем как уже сделано) Да, и SqlDataReader можно и самому закрыть, через функцию Close. Это сообщение отредактировал(а) azesmcar - 13.8.2009, 14:05 |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
функция и правда дурацкая
никаких преимуществ перед прямыми вызовами ExetuteReader, ExecuteScalar, ExecuteNonQuery она не имеет - всё равно в каждом случае надо будет вызывать её с нужным QueryType, что мало отличается от прямого вызова нужного метода, да и потом нужно этот искусственный энум учитывать, чтобы знать, как с возвращённым значением работать я бы объединил бы подготовительные действия с функцию, возвращающую DbCommand, а у неё уже вызывать один из трёх методов напрямую пользователем твоей обёртки, если команда будет наружу выдаваться, либо через обёрточные методы попытки обобщить необобщаемое ни к чему хорошему не приводят, если бы с этими методами команды можно было бы работать одним и тем же образом, то, не сомневаюсь, в .Нет была бы заложена такая возможность |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
У меня дикий дубляж кода шёл, этой функцией я 1000 строк сократил, я сделал как надо, в моём случае работает очень хорошо...
В каких-то других ситуациях, думаю это неоправдано. Хотя я думаю, что эту функцию можно-таки улучшить...
Хотя вот этот вариант, мне определённо нравится. Он логичен и прост. Возможно, так и сделаю. Просто сразу, честно говоря, не всегда видно как сделать просто и хорошо. Это сообщение отредактировал(а) ДобренькийПапаша - 13.8.2009, 17:30 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| ДобренькийПапаша |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Уважаемый Михряк, я раньше делал вот так:
И всё время дубляж нехилый получается, меня это загребло... using, try, openConnect, Command, Parameters, Execute, Read, CloseRead, catch, closeConnect ... У меня программа напичкана вызовами мелких хранимых процедур.... Поэтому я и написал ту некрасивую функцию... В моём конкретном случае единственный недостаток в ней , это то, что при передаче SqlDataReader коннект открытый висит (они в пуле размножаются насколько я знаю) (при других Execute я коннект спокойно закрываю...) Можно там массив объектов возвращать, то есть всё вытащить из DataReader... но это накладно... Ну вобщем не знаю, что скажете? Это сообщение отредактировал(а) ДобренькийПапаша - 14.8.2009, 07:15 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
||||
|
|||||
| mihryak |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
посмотри на такой вариант
набросал на глаз прототип, ни на какой базе не тестировал уродства прибавит создание параметров (кстати, сеттер DbParameter скорее всего сумеет правильно определить DbType, только для null надо будет написать исключение, проверь) ну и мне не нравится, что не освобождается DbCommand. сделал так, чтобы была возможность вернуть DbDataReader. во всех примерах от MS команды тоже не диспозятся, но это - сомнительное основание поступать так же. здесь обсуждался вопрос можешь ещё рассмотреть вариант, при котором ридер вообще не надо будет возвращать, возвращая вместо этого уже готовый прочитанный из него датасет. не исключено, что потеряются некоторые фишки, хранимки потребуется заединообразить, но я пользовался и пользуюсь подобным вариантом, и вполне себе доволен Это сообщение отредактировал(а) mihryak - 15.8.2009, 22:45 |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |