powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Соединение с разными серверами БД
25 сообщений из 53, страница 2 из 3
Соединение с разными серверами БД
    #35877369
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеекВсем спасибо, почитал, подумал поэкспериментировал.
универсальный класс в моем случае порождает слишком много всяких если.
под каждую субд буду реализовывать свой класс обращения к данным.
В конце концов разные типы коннекшнов и т.д. для того и создавали.
Если бы все было так гладко, сделали бы один универсальный класс.
Всем спасибо...
плохо подумали. для того и реализован единый интерфейс для всех классов - чтобы по одному образцу работать со всеми. дело ваше (пожимает плечами...)
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877410
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Compositum
упаковав код в расширяемый метод , который будет вызываться на классе DbCommandBuilder

Маленький набросок, если можно...
_________________
"Helo, word!" - 17 errors 56 warnings

правда я для метода реализовал на выходе не void, но это не проблема - можете подправить код на своё усмотрение. вроде должно работать...
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877465
5копеек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum5копеекВсем спасибо, почитал, подумал поэкспериментировал.
универсальный класс в моем случае порождает слишком много всяких если.
под каждую субд буду реализовывать свой класс обращения к данным.
В конце концов разные типы коннекшнов и т.д. для того и создавали.
Если бы все было так гладко, сделали бы один универсальный класс.
Всем спасибо...
плохо подумали. для того и реализован единый интерфейс для всех классов - чтобы по одному образцу работать со всеми. дело ваше (пожимает плечами...)

чем Ваш код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
case
                case "System.Data.OracleClient.OracleCommand":
                      тра та та
                    break;
                case "System.Data.SqlClient.SqlCommand":
                      тра та та
                    break;

отличается от моего изначального
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
case
                case "System.Data.OracleClient.OracleCommand":
                       OracleCommand cmd = ....

                    break;
                case "System.Data.SqlClient.SqlCommand":
                      SqlCommand cmd = ....
                    break;

Плюсы в чем ?
В вашем решении пока я вижу только лишние телодвижения и в результате те же проблемы: проверка по типу и кастомная логика для каждого типа, ручками.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877507
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеек
Плюсы в чем ?
В вашем решении пока я вижу только лишние телодвижения и в результате те же проблемы: проверка по типу и кастомная логика для каждого типа, ручками.
плохо смотрите. вы знакомы с расширяющими методами (судя по вашей реплике - нет). Иначе бы знали, что данный класс добавляет к любому экземпляру класса DbCommandBuilder (или наследуемому от него) новый метод - DbDeriveParameters.Теперь любой экземпляр класса DbCommandBuilder имеет этот метод. Пояснять плюсы не буду, ибо они очевидны.

п.с. не ленитесь читать книжки...
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877584
5копеек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum5копеек
Плюсы в чем ?
В вашем решении пока я вижу только лишние телодвижения и в результате те же проблемы: проверка по типу и кастомная логика для каждого типа, ручками.
плохо смотрите. вы знакомы с расширяющими методами (судя по вашей реплике - нет). Иначе бы знали, что данный класс добавляет к любому экземпляру класса DbCommandBuilder (или наследуемому от него) новый метод - DbDeriveParameters.Теперь любой экземпляр класса DbCommandBuilder имеет этот метод. Пояснять плюсы не буду, ибо они очевидны.

п.с. не ленитесь читать книжки...

Я со всем этим согласен, но к выводу как раз пришел читая книжки,
Цитирую:
"Например не существует обобщенного способа перехватывать объекты исключений базы данных...."
"... разные поставщики могут подерживать специализированные средства, недоступные для общих базовых классов"

Я не говорю что предложенный вами подход неудачен. В вашем случае его возможно достаточно, в моем случае он может оказаться неоптимален. Причем неоптимален впоследствии.
В данном случае мне важнее возможность как можно более широко использовать возможности предоставляемые каждой СУБД. А универсальный поставщик как раз сужает эти возможности.
Условно говоря я лучше сейчас потрачу время, чем потом окажусь перед проблемой ради которой придется рефакторить пару-тройку-десятку приложений.

В любом случае спасибо за инфо, все это очень помогло.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877599
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеекА универсальный поставщик как раз сужает эти возможности.
Если честно - я не понял этой фразы. О каком универсальном поставщике идет речь? Ведь мы извлекаем каждый раз конкретного, нужного нам поставщика, просто упаковываем его в родительский класс. Но распаковать-то не проблема. Это в C++ (насколько я знаю) если бы мы упаковали объект дочернего класса в родительский, то все то, что было характерно чисто для дочернего класса - обрубалось, однако в шарпее это ведь не так - мы всегда может затем без каких либо потерь преобразовать в его настоящий тип и использовать его на все 100%.

Поясните пожалуйста.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877607
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,
В с++ то - же самое.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877616
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеек
"... не существует обобщенного способа перехватывать объекты исключений базы данных...."
"... разные поставщики могут подерживать специализированные средства, недоступные для общих базовых классов"
но ведь все поставщики так или иначе пишут код под .net, а следовательно, как мне кажется, все исключения должны наследоваться от класса Exeption. Т.е. можно программно отслеживать его.
Видимо чего-то я не понимаю =)
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877621
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_LamerCompositum,
В с++ то - же самое.
значит путаю с др. языком...

странно, мне почему-то запомнилось, что это именно в C++...
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877624
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеек,
Ничего нигде вы не сужаете.
Объясню по простому.
У вас есть конкретные классы для работы с разными серверами(с учетом их индивидуальных особенностей).
Фабрика вам дает упакованный объект, в этом конкретном классе вы его распаковываете, и работаете с учетом этих особенностей.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877632
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_Lamer5копеек,
Ничего нигде вы не сужаете.
Объясню по простому.
У вас есть конкретные классы для работы с разными серверами(с учетом их индивидуальных особенностей).
Фабрика вам дает упакованный объект, в этом конкретном классе вы его распаковываете, и работаете с учетом этих особенностей.
+1:
то, что я и пытаюсь объяснить человеку =)

видать хреново объясняю =(((
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877635
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_Lamer,

Мне почему-то казалось, что код, который я привел в самом начале для консольного приложения, довольно развёрнуто это раскрыл (просто для меня это очень наглядно, решил, что и для др. так же будет понятным)...
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877639
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumSQL_Lamer,

Мне почему-то казалось, что код, который я привел в самом начале для консольного приложения, довольно развёрнуто это раскрыл (просто для меня это очень наглядно, решил, что и для др. так же будет понятным)...

А я поленился читать первую страницу :))
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877643
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_LamerCompositumSQL_Lamer,

Мне почему-то казалось, что код, который я привел в самом начале для консольного приложения, довольно развёрнуто это раскрыл (просто для меня это очень наглядно, решил, что и для др. так же будет понятным)...

А я поленился читать первую страницу :))
а я там код не приводил, только ссылку на него.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877657
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

5копеек просто не вкурил гибкость этого шаблона.
Бывает.
Если ему еще интерестна эта тема - рекомендую Гамму - паттерны проектирования.

5копеек,
Прямой подход - который вы используете - ничем не плох, кроме отсутствия гибкости.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877898
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
 switch (cmd.ToString())
            {                
                //Если есть еще какие нужные провайдеры - следует добавить соответствующий блок case
                case "System.Data.OleDb.OleDbCommand":


заменить на

Код: plaintext
1.
2.
3.
4.
if(cmd is System.Data.OleDb.OleDbCommand)
{
}

...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877900
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PC_2,

это еще зачем??? и что мы получим тогда?
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877908
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что зачем ?
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877910
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему вместо ?

Код: plaintext
1.
else if (cmd.GetType().FullName == "System.Data.SqlClient.SqlCommand")

нужно писать

Код: plaintext
1.
else if (cmd is System.Data.SqlClient.SqlCommand)

не знаю, посиди подумай
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35877930
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PC_2
не знаю, посиди подумай

чего мне-то думать? это не я написал, а ты, вот сиди и думай . смысл написанного мною ясен мне и так, а над этим не вижу смысла думать (ибо не вижу проблем в написанном мною коде, во всяком случае пока ;) )

Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35878650
5копеек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PC_2
Код: plaintext
1.
cmd is System.Data.OleDb.OleDbCommand)


Спасибо, на мой взгляд верное замечание.

CompositumО каком универсальном поставщике идет речь? Ведь мы извлекаем каждый раз конкретного, нужного нам поставщика, просто упаковываем его в родительский класс. Но распаковать-то не проблема. Это в C++ (насколько я знаю) если бы мы упаковали объект дочернего класса в родительский, то все то, что было характерно чисто для дочернего класса - обрубалось, однако в шарпее это ведь не так - мы всегда может затем без каких либо потерь преобразовать в его настоящий тип и использовать его на все 100%.

Поясните пожалуйста.

В данном случае я понял вас так.
Есть некий класс или унаследованный метод - оболочка обрабатывающая запросы к серверу БД.
В него передаем класс DBcommand с заполнеными параметрами и строкой соединения.

В вашем случае имеем внутри этого класса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public чтото Run(cmdIn)
{
providerName =// берем из cmd.connection строку подключения и провайдера
DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
DbCommand cmdprov = provider.CreateCommand();
cmdprov = cmdIn;
// выполнение запроса
// обработка результатов
}

Я правильно понимаю или нет вашу идею?

В моем случае
Код: plaintext
1.
2.
3.
4.
5.
public чтото Run(cmd)
{
// выполнение запроса
// обработка результатов
}

в любом случае для каких то операций специфичных для каждого сервера БД нужно проверять тип провайдера и условно обрабатывать его.
В таком контексте не вижу смысла использовать DbProviderFactory. Т.к логика что с ним что без него одинакова, а сложность кода возрастает.
Возможно я чего то не понимаю, поясните.

SQL_Lamer
Ничего нигде вы не сужаете.
Объясню по простому.
У вас есть конкретные классы для работы с разными серверами(с учетом их индивидуальных особенностей).
Фабрика вам дает упакованный объект, в этом конкретном классе вы его распаковываете, и работаете с учетом этих особенностей.

я понимаю что фабрика дает мне объект, я не понимаю смысл писать под фабрику если можно написать new "то что мне нужно" точно так же в зависимости от строки подключения и получить объект заточеный под конкретную СУБД.
Я не отвергаю этого подхода, просто не понимаю зачем лишняя возня с "упаковыванием / распаковыванием" как вы выразились
Был бы смысл если бы все провайдеры были полностью взаимозаменяемы, но этого нет на 100%.

Пока для меня смысл использования фабрики представляется примерно такой же как для того что бы использовать trim строки преобразовать ее сначала в объект а затем обратно в строку.
В чем гибкость не понимаю.
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35878707
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеек,

возможно понимание придет к вам со временем, я устал биться
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35878733
5копеек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum5копеек,

возможно понимание придет к вам со временем, я устал биться

Если вы не в состоянии объяснить, возможно вы сами не понимаете?
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35878754
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5копеекCompositum5копеек,

возможно понимание придет к вам со временем, я устал биться

Если вы не в состоянии объяснить, возможно вы сами не понимаете?
именно так, я не понимаю вместе с разработчиками Майкрософта, создавшими класс DbProviderFactopy, и вместе с Дэвидом Сеппой, который в конце своей книги в приложении подробно разъясняет все прелести данного подхода вы обсолютно правы, снимаю шляпу
...
Рейтинг: 0 / 0
Соединение с разными серверами БД
    #35878859
5копеек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum5копеекCompositum5копеек,

возможно понимание придет к вам со временем, я устал биться

Если вы не в состоянии объяснить, возможно вы сами не понимаете?
именно так, я не понимаю вместе с разработчиками Майкрософта, создавшими класс DbProviderFactopy, и вместе с Дэвидом Сеппой, который в конце своей книги в приложении подробно разъясняет все прелести данного подхода вы обсолютно правы, снимаю шляпу

Ну если у вас самоцель обязательно использовать каждый класс фреймворка, то тогда конечно вы правы .

Ну раз Сеппа разъясняет, вам что стоит повторить то что он говорит?

Пока мое впечатление осталось прежним.
DbProviderFactopy для простеньких приложений , аля select * from employee годится. А когда требуются всякие извраты с БД с уже написанным приложением, лучше использовать свои методы/для каждой БД.
А из книг я использую то что оправданно а не слепо пихаю везде модные новые словечки.
Ни Сеппа ни разработчики microsofta мои проблемы решать потом не будут.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Соединение с разными серверами БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]