![]() |
|
Модераторы: gambit |
![]()
|
|
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Приветсвтую всех.
Предлагаю вашему вниманию класс оболочку который можно использовать для подключения к БД и выполнения обычных операций с ней. Этот клас сделан для БД Access, но если заменить OleDb на SqlClient то можно с таким же успехом использовать его и для подключения к БД на SQL server. В любом классе программы, где нужны будут манипуляции с БД, создаете экземпляр этого класса и используете его методы и свойства. Критика и дополнения приветствуются.
-------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 3 Всего: 17 |
Можно добавить создание связей между таблицами и цены твоему классу не будет!
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| tol05 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
thomas, да сделай универсальный класс, под любого провайдера! 1. Замени везде у себя
на
или добавь сразу поля для соединения, команды, адаптера и т.д. под все виды провайдеров... 2. Сделай
членом класса, в конструкторе можно будет выбирать нужное значение и тогда можно будет работать под конкретного провайдера. и вместо cmd = New OleDbCommand() в каждом случае будет cmd = New OleDbCommand() или cmd = New SqlCommand() или... Полиморфизм - могучая штука... Если не получится сделать один универсальный класс, с работой через базовые DbConnection, DbCommand, DbDataAdapter - можно сделать абстрактный класс BaseAccessToDB и под каждого провайдера - наследника. Это более легковесный вариант, для каждого провайдера - только нужные ему данные и ничего лишнего. Неплохая библиотека может получиться. Короче, думаю, мысль понятна -------------------- На хорошей работе и сны хорошие снятся. |
||||||||
|
|||||||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Experimenter,
tol05, Спасибо за отклики. Пока нет времени, но в плане стоит работа над этим классом. Есть еще мысли. А пока в процессе использования в реальной программе обнаружилась ошибочка вот здесь:
Этот метод(ds.AcceptChanges()) нельзя вызывать. Если в ДС поместить пустую таблицу из БД и заполнять ее строками при помощи этого метода(AddRowToTable(ByVal tableName As String, ByVal dr As DataRow)) то, таблицу мы заполним, не вопрос, а вот потом выполнить обновление таблицы в БД будет невозможно. Не выполняется условие:
Это сообщение отредактировал(а) thomas - 1.8.2007, 21:35 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 3 Всего: 17 |
Еще нужно научить класс задавать типы данных для полей таблиц. Ты создаешь DataTable, задаешь для полей типы данных и сохраняешь эту таблицу в базе. Не помню точно, но по-моему типы данных как-то выдергиваются из DataTable при создании таблицы в Access. А если вдруг понадобится какой-либо тип изменить? Также (наверное) необходимо предусмотреть создание первичных-вторичных ключей, автоинкрементных полей.
-------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| thomas |
|
||||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Experimenter,
Я делаю это так:
И ву а ля, таблица в БД Access создана. Здесь правда все поля текстовые, но разной длинны.
А вот создание связей между таблицами в ДС будет наверное не лишним.
Это что-то непонятное. Вообще если в ДС содать таблицу на основе таблицы из БД, то да, типы полей соответствуют типам из БД. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||||
|
|||||||||
| Experimenter |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 3 Всего: 17 |
Если ты в таблице создаешь DataColumn:
хочешь сказать, что при конвертации таблицы в Access тип данных, заданный для столбца, не будет учтен? -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
||||
|
|||||
| ckopn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
На СиШарпе кода нет?
|
|||
|
||||
| moric83 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 9.7.2007 Репутация: нет Всего: 1 |
||||
|
||||
| ckopn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Супер! |
|||
|
||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
ckopn,
Получите и распишитесь.
-------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| Mag |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.6.2005 Репутация: нет Всего: нет |
Класс! Главное - то, что нужно. --------------------
В каждой черной комнате есть выход - всегда есть выход с любой ситуации! |
||||||
|
|||||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Привет всем.
Постараюсь в ближайшее время проработать высказанные выше пожелания. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| kirillga |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Подскажите новечку как пользоваться класом???
пишу так:
Хочу результат в comboBox положить. ЗАРАНЕЕ ОГРОМНОЕ СПАСИБО. |
|||
|
||||
| Aquarius |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 9.4.2008 Репутация: нет Всего: нет |
Товарищи, действительно, как пользоваться классом ? |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |