Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Надо или не надо задавать новую локаль?

292  
Murr_0002 знакомое лицо05.04.18 12:54
Murr_0002
05.04.18 12:54 

Повторное.


Как поймать момент подключения к базе?


Имеем стандартный СклКоннектион или ОраклеКоннектион.

Две понятные операции - Опен() и Клосе().


Имеем две (три, пять и т.д.) баз, с которыми надо работать.

Проблема - сервера разных версий и сконфигурированы по-разному.

На трех заводах - две версии серверов и три разных конфигурации.


Можно сказать серверу, что интерфейсная часть будет пользоваться локалью,

отличной от локали инсталлированного сервера.

Обычно это две команды после Опен().

Это - работает.


Я где-то читал, что коннекты внутренне кешируются.

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


Вопрос: Как выяснить - дан кешированный коннект или новый? Надо или не надо задавать новую локаль?

#1 
AlexNek патриот05.04.18 22:25
AlexNek
NEW 05.04.18 22:25 
в ответ Murr_0002 05.04.18 12:54
Как выяснить - дан кешированный коннект или новый?

По идее никак официально. Можно попробовать время замерять.


Надо или не надо задавать новую локаль?

а что ты под этим подразумеваешь?

#2 
Murr_0002 знакомое лицо06.04.18 09:37
Murr_0002
NEW 06.04.18 09:37 
в ответ AlexNek 05.04.18 22:25
а что ты под этим подразумеваешь?

-----


OracleCommand oraCMD = new OracleCommand("ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH'", oraCN);
oraCMD.ExecuteNonQuery();
OracleCommand oraCMD1 = new OracleCommand("ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY'", oraCN);
oraCMD1.ExecuteNonQuery();

немного накладно выполнять ЭТО перед каждым запросoм к базе.

#3 
Murr_0002 знакомое лицо06.04.18 09:38
Murr_0002
NEW 06.04.18 09:38 
в ответ Murr_0002 06.04.18 09:37

Можно попробовать время замерять.

-----

Тогда проще свой пулл сделать...

#4 
Murr_0002 знакомое лицо06.04.18 09:40
Murr_0002
NEW 06.04.18 09:40 
в ответ Murr_0002 06.04.18 09:38

Хммм...

Попробовать получить Сессию и kоннектится на нее?

#5 
  moose старожил06.04.18 12:57
NEW 06.04.18 12:57 
в ответ Murr_0002 06.04.18 09:40

#6 
AlexNek патриот06.04.18 23:10
AlexNek
NEW 06.04.18 23:10 
в ответ Murr_0002 06.04.18 09:37
немного накладно выполнять ЭТО перед каждым запросoм к базе

Что то я не припомню что бы мы это делали. Один раз установили в настройках базы и забыли


https://docs.oracle.com/cd/B28359_01/server.111/b28298/ch3...

https://docs.oracle.com/cd/B19306_01/win.102/b14307/featGl...

Но даже если и так хочется то что мешает написать

oraCN.SetMyLanguageSettings();

#7 
Murr патриот07.04.18 00:19
Murr
NEW 07.04.18 00:19 
в ответ AlexNek 06.04.18 23:10

в настройках базы

-----

А базу мне, по прежнему, трогать никак не разрешено...

И сконфигурены они по разному... а прога - одна.


oraCN.SetMyLanguageSettings

-----

это вроде как меняет локальную настройку на эквивалентную серверу

Мне же нужно сказать серверу что то что будет будет не в его локали

- без выполнения запроса к базе такое не происходит. Вот и думаю

Как это подсократить.

#8 
AlexNek патриот07.04.18 00:29
AlexNek
NEW 07.04.18 00:29 
в ответ Murr 07.04.18 00:19

имелось в виду - oraCN.SetMurkaMyLanguageSettings()

#9 
Murr патриот07.04.18 10:34
Murr
NEW 07.04.18 10:34 
в ответ AlexNek 07.04.18 00:29

Аааа, это...

Коннектионы - заселеные классы. Ковырять их - накладно по времени.

Но основное - сами операции никуда не деваются.

#10 
AlexNek патриот07.04.18 12:50
AlexNek
NEW 07.04.18 12:50 
в ответ Murr 07.04.18 10:34
Коннектионы - заселеные классы

где ты такие переводы находишь? Пиши уж лучше на оригинале

http://www.sharp-blog.ru/extension-methods-in-csharp.html


Ковырять их - накладно по времени.

Понять вызов - еще можно поверить, а вот с ковырянием непонятно...

#11 
Murr патриот09.04.18 11:36
Murr
NEW 09.04.18 11:36 
в ответ AlexNek 07.04.18 12:50

1. Оно - работает.

2. Упаковать в метод - проблемы нет.

3. Проблема - как избежать повторного выполнения, если коннект из пула и выполнение излишне.

Т.Е.

if(!connection.CheckIfStilOpen)
connection.DoSessionConfiguration();

интересует не DoSessionConfiguration(); а CheckIfStilOpen;

#12 
AlexNek патриот09.04.18 22:56
AlexNek
NEW 09.04.18 22:56 
в ответ Murr 09.04.18 11:36

State есть, но он вроде ничего не дает. Можно установить что то ненужное в сессии и затем проверять.

А что много времени теряется?

#13 
Murr патриот10.04.18 00:14
Murr
NEW 10.04.18 00:14 
в ответ AlexNek 09.04.18 22:56

Часть кода просто тупо лазит за каждым нужным значением в базу.

Берется 50,000 из одной таблицы, 20,000 из другой и начинает

перемешиваться с добавлением цифирек из базы.

Можно пофиксить сделав что-то на с методикой рассчета, но она

не документирована - что-то знаю, что-то не понимаю...

Ну и много всего - в мою голову уже не помещается.


Видимо придется писать вой пул.

#14