|
|
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvА как же тогда использовать локальные таблицы??? Их смысл с том, что они создаются только для текущего соединения текущего пользователя. Временные таблицы выносить за пределы сервера есть зло. Не для этого они предназначены. Как вариант - пересматривайте логику (лучший вариант), что бы клиент не общался с таблицами вообще (и с временными в том числе). Или делайте костыли - постоянную таблицу + view (для разделения данных пользователей) + табличную функцию над ней для разделения данных пользователя (если используете более одного логического соединения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2008, 19:58 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Roman S. GolubinВременные таблицы выносить за пределы сервера есть зло. +1 я вообще не понимаю, что автор сам создает себе проблемы, временные таблицы пусть будут на серваке, они там никому не мешают, а вам проблем меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 08:55 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Ладно поясню задачу. Делаю конвертор по переброске данных из одной базы (не MS SQL) в другую (MS SQL). В новой базе (сторонних производителей) логика крутится вокруг локальных таблиц. В приложении на Delphi с этим нет вообще никаких проблем. Я пишу приложение-конвертор на .NET. И вот у меня есть проблемы. Я не в силах менять никакой логики работы базы. Я лишь хочу чтобы мой конвертор нормально работал с учетом того, что на сервере процедуры используют локальные таблицы. По существу кто-нибудь может что-нибудь сказать по вопросу появления двух соединений с базой при наличии только одной строки подключения. Ведь если есть прецедент, то почему, например не возникнет ситуации, когда мое приложение будет самопроизвольно плодить не два, а сто соединений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 12:31 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Очень жаль что Вы не хотите ничего почитать про то, как работает пул соединений... Покажите код (естесно без лишнего фарша) кторый приводит к появлению ещё одного соединения... И ещё... просто моё мнение - строить трансфер так, как это делаете Вы не эффективно... нак Вам логика этих производителей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 12:43 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
buserОчень жаль что Вы не хотите ничего почитать про то, как работает пул соединений... Покажите код (естесно без лишнего фарша) кторый приводит к появлению ещё одного соединения... И ещё... просто моё мнение - строить трансфер так, как это делаете Вы не эффективно... нак Вам логика этих производителей? Логика производителей мне как раз таки и нужна. Допустим есть процедура которая заполняет основную таблицу в базе и пяток дополниельных. Причем в каждой из этих таблиц есть триггеры с процедурами увязанными на локальные таблицы. Так вот в этих процедурах много различных условий и проверок, которые уже реализованы разработчиками базы. Почему я не должен использовать эту логику? Это в разы упрощает мою задачу. Этот код я уже приводил выше Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 12:51 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Т.е. Вы хотите сказать что у Вас между conn.Open(); и conn.Close(); создаютсяновые сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 13:04 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
buserТ.е. Вы хотите сказать что у Вас между conn.Open(); и conn.Close(); создаютсяновые сессии? Нет. Я хочу сказать что здесь создаются локальные таблицы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. В несколько измененном коде, если не делать conn.Close() реально висят два соединения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 13:14 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
В этих соединениях через профайлер замечен разный SPID. Еще раз напомню, что строка подключения в приложении ОДНА. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 13:22 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
хз... может... Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 13:37 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
buserхз... может... Код: plaintext Не помогает. Помогает только ConnectionReset=false. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 13:48 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvПомогает только ConnectionReset=false. Вам помочь может только изменение логики работы с "таким" сервером. Пишите всю обработку на SQL и пускайте все что касается временнчх таблиц в одном батче: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:00 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Да, и еще - не забудьте надавать разработчикам серверной части линейкой по граблям! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:02 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Roman S. GolubinДа, и еще - не забудьте надавать разработчикам серверной части линейкой по граблям! +1 Но все таки интересно почему два соединения от клиента, хотя по логике, как ни крути должно быть одно. Пул для того он и пул, чтобы не выдавать лишние соединения если строка подключения одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:07 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvПул для того он и пул, чтобы не выдавать лишние соединения если строка подключения одна. В пуле есть собственные процессы. Часть из них, при нагрузке, или недофетченном курсоре, например, может быть отложена "на потом", и вместо освобождения текущего соединения пул легко может выдать новое. Именно для этих целей, в том числе, пул и предназначен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:18 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Roman S. Golubin В пуле есть собственные процессы. Часть из них, при нагрузке, или недофетченном курсоре, например, может быть отложена "на потом", и вместо освобождения текущего соединения пул легко может выдать новое. Именно для этих целей, в том числе, пул и предназначен. Все ясно. Значит постулат "единая строка подключения -> одно соединение" не верен. Хотя в литературе я обратного утверждения нигде не встречал. Возможно мало читал по этому поводу. Применительно к моему случаю все равно непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:35 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvВсе ясно. Значит постулат "единая строка подключения -> одно соединение" не верен. Зависит от того, что Вы считаете "одним соединением". Логическое соединение - да. Физическое - как придется, иначе зачем тогда вообще пул нужен? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:38 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvПрименительно к моему случаю все равно непонятно. Что не понятно? Аналогия с пистолетом. Стреляете из одного пистолета, патроны одни и те же, но вместо того, что бы перезаряжать каждый раз одну и ту же обойму, когда патроны в ней закончились (или заклинило, или еще что нибудь), Вы достаете другую и продолжаете стрелять дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:42 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Roman S. Golubin savolvПрименительно к моему случаю все равно непонятно. Что не понятно? Аналогия с пистолетом. Стреляете из одного пистолета, патроны одни и те же, но вместо того, что бы перезаряжать каждый раз одну и ту же обойму, когда патроны в ней закончились (или заклинило, или еще что нибудь), Вы достаете другую и продолжаете стрелять дальше. Как раз и непонятно где у меня заклинило или патроны кончились, что потребовалось новую обойму вставлять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 14:47 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvКак раз и непонятно где у меня заклинило или патроны кончились, что потребовалось новую обойму вставлять :) Думаю, в Вашем случае проблема в том, что Вы пытаетесь повторно использовать один и тот же объект SqlCommand - создайте отдельный для каждого запроса, не забывайте использовать Command.Dispose, что бы команда "отпустила" соединение. Хотя, я не уверен, возможно, именно в этот момент может происходить "смена обоймы", точно так же, как и при изменении Command.CommandText. Рефлектором. конечно, можно посмотреть, что там происходит, но не факт, что завтра логику не сменят и не придется все переписывать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 15:10 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Roman S. Golubin Думаю, в Вашем случае проблема в том, что Вы пытаетесь повторно использовать один и тот же объект SqlCommand - создайте отдельный для каждого запроса, не забывайте использовать Command.Dispose, что бы команда "отпустила" соединение. Хотя, я не уверен, возможно, именно в этот момент может происходить "смена обоймы", точно так же, как и при изменении Command.CommandText. Рефлектором. конечно, можно посмотреть, что там происходит, но не факт, что завтра логику не сменят и не придется все переписывать. :) Попробовал. Не помогло :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2008, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35353695&tid=1352253]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 321ms |

| 0 / 0 |
