|
|
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
В приложении используется класс для соединения с MS sql Сейчас необходимо добавить возможность соединения с Oracle. Доработал класс он работает но не уверен что "идеологически" правильно все написал и в дальнейшем не вылезут грабли. Покритикуйте, выскажите мнения пожалуйста. код ниже Загрузка результатов через dataAdapter Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Выполнение запроса и обработка ошибок Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 10:41 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Откройте для себя интерфейсы IDbConnection,IDbCommand,IDbDataAdapter,IDbDataParameter, класс DbProviderFactories Когда надоест - посмотрите на ORM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:06 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Я, конечно, дико извиняюсь ;), но ковыряться в коде лениво... сорри. Тут в мелкософте наваяли бесплатную библиотеку Enterprise Library , в которой существует блок с классами, решающими сходные проблемы. Все что необходимо, это добавить референс на необходимые DLL и пользоваться готовыми классами, сконфигурировав соотвествующие датапровайдеры в конфигурационном файле (это полторы минуты работы). В библиотеке еще много чего вкусного найти можно. Код открыт. Сырцы прилагаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:10 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
5копеек... Покритикуйте, выскажите мнения пожалуйста. ... Все 3 LoadResult метода можно заменить одним: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:15 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Изопропил класс DbProviderFactories +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:38 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
ИзопропилОткройте для себя интерфейсы IDbConnection,IDbCommand,IDbDataAdapter,IDbDataParameter, класс DbProviderFactories Когда надоест - посмотрите на ORM Насчет ORM, боюсь я программ которые сами генерят запросы. Собственно в приложении уже есть некое подобие ORM, средний слой, т.е. у классов есть методы сохраниться загрузиться и т.д. Насчет DbProviderFactories можно меня ткнуть в доку какую нить или на пальцах обьяснить. в MSDN-е поискал что то не понял ни чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:04 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
alexdrEnterprise Library Спасибо скачал, изучаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:05 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
qu-qu5копеек... Покритикуйте, выскажите мнения пожалуйста. ... Все 3 LoadResult метода можно заменить одним: Код: plaintext 1. 2. 3. 4. Спасибо. В случае если нужна подстройка для какого то конкретного источника данных. Вопрос выбор источника данных через Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:08 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Как бы не в тему, но, вроде и по теме: как в контексте фабрики подрывать xCommandBuilder (4 example, xCommandBuilder.DeriveParameters() )? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:30 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
5копеек В случае если нужна подстройка для какого то конкретного источника данных. Вопрос выбор источника данных через Код: plaintext на мой взгляд - это не верный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:32 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum5копеек В случае если нужна подстройка для какого то конкретного источника данных. Вопрос выбор источника данных через Код: plaintext на мой взгляд - это не верный подход. Что бы вы посоветовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:33 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
5копеек Что бы вы посоветовали? используйте DbProviderFactories для получения нужного вам провайдера (DbProviderFactory), который, в свою очередь создаст нужные вам экземпляры всех классов, заточенных именно под конкретную СУБД. Код получите единый, т.е. менять ничего не придется, и сможете влёт переключаться на любой др. СУБД. сейчас у меня нет под рукой кода, но дома лежит подробный развернутый демонстрационный код (написал для консольного приложения). Если захотите - вечером приду домой и выложу его в этом топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:39 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum5копеек Что бы вы посоветовали? используйте DbProviderFactories для получения нужного вам провайдера (DbProviderFactory), который, в свою очередь создаст нужные вам экземпляры всех классов, заточенных именно под конкретную СУБД. Код получите единый, т.е. менять ничего не придется, и сможете влёт переключаться на любой др. СУБД. сейчас у меня нет под рукой кода, но дома лежит подробный развернутый демонстрационный код (написал для консольного приложения). Если захотите - вечером приду домой и выложу его в этом топике. Был бы весьма признателен. Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:44 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum... сейчас у меня нет под рукой кода, но дома лежит подробный развернутый демонстрационный код (написал для консольного приложения)... А у меня как раз под рукой это есть (может быть не такое подробное и развернутое, но работало когда-то): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 13:37 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum используйте DbProviderFactories для получения нужного вам провайдера (DbProviderFactory), который, в свою очередь создаст нужные вам экземпляры всех классов, заточенных именно под конкретную СУБД тынць ? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 14:48 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Ex_Soft Compositum используйте DbProviderFactories для получения нужного вам провайдера (DbProviderFactory), который, в свою очередь создаст нужные вам экземпляры всех классов, заточенных именно под конкретную СУБД тынць ? _________________ "Helo, word!" - 17 errors 56 warnings нет это не оно. я именно о родном для .net framework классе: DbProviderFactories. там всё предельно ясно и удобно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 14:59 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
5копеекCompositum5копеек Что бы вы посоветовали? используйте DbProviderFactories для получения нужного вам провайдера (DbProviderFactory), который, в свою очередь создаст нужные вам экземпляры всех классов, заточенных именно под конкретную СУБД. Код получите единый, т.е. менять ничего не придется, и сможете влёт переключаться на любой др. СУБД. сейчас у меня нет под рукой кода, но дома лежит подробный развернутый демонстрационный код (написал для консольного приложения). Если захотите - вечером приду домой и выложу его в этом топике. Был бы весьма признателен. Спасибо за помощь. нашел код (вспомнил, что я его выкладывал на форуме). Создайте новое консольное приложение, скопируйте в него весь код и запустите. поскольку все провайдеры данных реализуют единые интерфейсы, то не составит труда переключится с одной субд на др. без изменения в коде. просто в файле конфигурации храните строку подключения. А программно из нее узнаете, какой провайдер для нее используется и соответственно юзаете конкретного, нужного вам провайдера. Код, демонструрующий это я привел когда-то здесь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:05 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum нет это не оно Почему это "не оно"? Compositum я именно о родном для .net framework классе: DbProviderFactories Ну и я ж о нем, родимом... Compositum там всё предельно ясно и удобно Я тоже так считал, пока речь шла о рукомашестве и ногодрыжестве (сиречЪ - теории) А на практике: 1. DbProviderFactory ConnectionString - родил 2. DbConnection из DbProviderFactory - родил 3. DbCommand из DbConnection - родил 4. Получить параметры SP - балалайка Ж8-/ Пришлось enum по провайдеру городить и в соответствии xCommandBuilder специфичный рожать. Мне самому это не нравится. Вот и спросил - мо я что-то упустил в этой жизни? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:11 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Ex_Soft 4. Получить параметры SP - балалайка Ж8-/ Пришлось enum по провайдеру городить и в соответствии xCommandBuilder специфичный рожать. Мне самому это не нравится. Вот и спросил - мо я что-то упустил в этой жизни? какие проблемы возникли с получением параметра SP ? =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:28 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
CompositumEx_Soft 4. Получить параметры SP - балалайка Ж8-/ Пришлось enum по провайдеру городить и в соответствии xCommandBuilder специфичный рожать. Мне самому это не нравится. Вот и спросил - мо я что-то упустил в этой жизни? какие проблемы возникли с получением параметра SP ? =) п.с. почему спрашиваю - потому, что точно знаю , что там никаких проблем нет кстати, в приведенном мною коде я показал как создается параметр для конкретного провайдера ;) Так что у вас там с "балалайками", "рукомашеством и ногодрыжеством" уважаемый практик ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:37 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum какие проблемы возникли как по выше описанной стройной схеме вызвать, соответственно, для: M$ SQL - SqlCommandBuilder.DeriveParameters() OLE DB - OleDbCommandBuilder.DeriveParameters() FB - FbCommandBuilder.DeriveParameters() Sybase ASE - AseCommandBuilder.DeriveParameters() etc. ??? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:42 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Ex_Soft как по выше описанной стройной схеме вызвать, соответственно, для: M$ SQL - SqlCommandBuilder.DeriveParameters() OLE DB - OleDbCommandBuilder.DeriveParameters() FB - FbCommandBuilder.DeriveParameters() Sybase ASE - AseCommandBuilder.DeriveParameters() etc. ??? _________________ "Helo, word!" - 17 errors 56 warnings насчёт DeriveParameters - тут я согласен. Значит не верно вас понял - я так понял, что вы не смогли создать (а не считать параметры из хранимки бд) параметр нужного провайдера. В этом случае действительно - без enum не обойтись, однако этот момент, на мой взгляд, можно решить, единожды - упаковав код в расширяемый метод , который будет вызываться на классе DbCommandBuilder. И назвать его (метод) соответственно: DbDeriveParameters. В конце концов в жизни у нас не так много СУБД, чтобы эту информацию (я о составе enum) пришлось бы менять часто (имхо). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:09 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Compositum упаковав код в расширяемый метод , который будет вызываться на классе DbCommandBuilder Маленький набросок, если можно... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:43 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, почитал, подумал поэкспериментировал. универсальный класс в моем случае порождает слишком много всяких если. под каждую субд буду реализовывать свой класс обращения к данным. В конце концов разные типы коннекшнов и т.д. для того и создавали. Если бы все было так гладко, сделали бы один универсальный класс. Всем спасибо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:49 |
|
||
|
Соединение с разными серверами БД
|
|||
|---|---|---|---|
|
#18+
Ex_Soft Compositum упаковав код в расширяемый метод , который будет вызываться на классе DbCommandBuilder Маленький набросок, если можно... _________________ "Helo, word!" - 17 errors 56 warnings Я думаю, что как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 17:20 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35875893&tid=1351894]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 355ms |

| 0 / 0 |
