|
|
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Возникла интересная ситуация. MS SQL Server. В базе имеются процедуры, которые работают с временными таблицами. Эти процедуры вызываются из триггера на обновление таблицы с данными. На клиенте при старте приложения создаю временные таблицы через CREATE TABLE #TMP... Затем делаю изменения в таблице с данными. Вызываю tableadapter.Update(...) таблицы с данными в которой триггер на обновление использует процедуры, работающие с временными таблицами. Получаю exeption от базы, что временной таблицы не существует. Что за беда. Строка соединения у адаптера и SQLCommand на создание таблиц одна и та же (из конфига приложения). Какие у кого будут мысли. Что я делаю не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2008, 22:29 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
пулинг соединений? опробовать отключить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2008, 22:42 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Pooling отключал. Не помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 00:04 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Методом научного тыка дошел до следующего. При загрузке приложения врем. таблицы однозначно создаются. Затем происходит первое обращение к данным tableadapter.Fill(...). И все, временные таблицы как ветром сдуло. Не пойму, куда дальше копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 01:25 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Вот и решилась проблема. Если кому интересно, то для правильной работы с локальными временными таблицами в свойствах соединения должны быть указаны следующие параметры: Pooling=True; Connection Reset=False ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 01:43 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolvВот и решилась проблема. Если кому интересно, то для правильной работы с локальными временными таблицами в свойствах соединения должны быть указаны следующие параметры: Pooling=True; Connection Reset=False Грабли готовы... и ждут своих героев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 09:23 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
buser Грабли готовы... и ждут своих героев. Назвался груздем, полезай в кузовок. Поподробнее про грабли, если нетрудно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:14 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
в смысле адаптер закрывает коннект.и поэтому таблицы сдувает. может у адаптера есть настройка не закрыавть коннект после метода fill? ведь времянка привязана к spid. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:22 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
AlexeiKв смысле адаптер закрывает коннект.и поэтому таблицы сдувает. может у адаптера есть настройка не закрыавть коннект после метода fill? ведь времянка привязана к spid. Самое интересное что коннект сбрасывается до запроса на выборку в Fill адаптера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:26 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Connection Reset=False просто вот это ,может закосячить все работу ado.net. так как если работа ведется с несколькими базами ,через один коннект,то может замутиться каша. так как database context не будет сброшен. ну у вас видимо все проще.так что опасаться не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:28 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolv AlexeiKв смысле адаптер закрывает коннект.и поэтому таблицы сдувает. может у адаптера есть настройка не закрыавть коннект после метода fill? ведь времянка привязана к spid. Самое интересное что коннект сбрасывается до запроса на выборку в Fill адаптера. значит код пишите так :) чудес то не бывает. вы код покажите уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:29 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
В профайлере это выглядит примерно так: exec sp_reset_connection Выполнение запроса на создание локальных таблиц (ExceNonQuery) ... ... ... exec sp_reset_connection Запрос для первого метода Fill... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:32 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
так,вы каким кодом то создаете времянки? такое ощущение что вы постоянно делаете новый sqlconnection объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:35 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
AlexeiK значит код пишите так :) чудес то не бывает. вы код покажите уже. Код просто банален. В Load формы SQLCommand.ExecuteNonQuery() с текстом CREATE TABLE #... По кнопке заполням адаптер из таблицы данных базы. И вот здесь локальных таблиц уже нет при Connection Reset=True. При Connection Reset=False все нормально. Строка подключения у всех одна, берется из config приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:43 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
AlexeiKтак,вы каким кодом то создаете времянки? такое ощущение что вы постоянно делаете новый sqlconnection объект. Я пользуюсь типизированным Dataset и все sqlconnection создаются самими адаптерами. Но если мне не изменяет память система пулинга должна следить затем, чтобы реально было одно соединение с базой для идентичных строк подключения в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:48 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
ну ,короче хорошо то,что вы не работаете с разными базами данных внутри приложения. как только... так сразу вспомните про Connection Reset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:57 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Примерный код в Load формы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код вызываемый по кнопке Код: plaintext 1. 2. Помоему ничего особенного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 14:01 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
В предыдущем посте правильнее вот так (все лишнее удалил) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 14:04 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Вопрос остался чисто теоретический. Почему все-таки сбрасывается соединение перед вызовом Fill адаптера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 14:07 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
потому что никто не обязан гарантировать что что-то там должно подбирать один и тот же коннект, кроме того ещё и работающий. Вообще это плохая практика, надеяться на такой случай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 17:35 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
зыпотому что никто не обязан гарантировать что что-то там должно подбирать один и тот же коннект, кроме того ещё и работающий. Вообще это плохая практика, надеяться на такой случай А как же тогда использовать локальные таблицы??? Их смысл с том, что они создаются только для текущего соединения текущего пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 18:06 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolv зыпотому что никто не обязан гарантировать что что-то там должно подбирать один и тот же коннект, кроме того ещё и работающий. Вообще это плохая практика, надеяться на такой случай А как же тогда использовать локальные таблицы??? Их смысл с том, что они создаются только для текущего соединения текущего пользователя. адаптер позволяет указать для себя не только строку подключения, но и уже готовый открытый коннект. вот и используйте эту возможность, как раз ваш случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 23:34 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
savolv зыпотому что никто не обязан гарантировать что что-то там должно подбирать один и тот же коннект, кроме того ещё и работающий. Вообще это плохая практика, надеяться на такой случай А как же тогда использовать локальные таблицы??? Их смысл с том, что они создаются только для текущего соединения текущего пользователя. нафига они вообще тебе нужны? они на то и временные, что существуют только в определенном scope, а держать в них данные между запросами - это глупость и рано или поздно перестанет работать 100%. Времянки надо создать, воспользоваться и сразу удалить. Все остальное это уже обычные таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2008, 12:37 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
Артем1 адаптер позволяет указать для себя не только строку подключения, но и уже готовый открытый коннект. вот и используйте эту возможность, как раз ваш случай. Я думал об этом. Но ведь соединение с базой и так должно быть одно (pooling). Весь вопрос, откуда берется второе, если строка подключения у всех адаптеров одна и та же. Где может быть косяк не пойму. Может быть в недрах сборок Framework и можно найти ответ, но просто нет на это времени и желания. Факт остался фактом. При создании соединения руками и адаптерами, созданными студией строки подключения чем-то отличаются из-за чего реально образуются два соединения с сервером. Хотя и в том и другом случае строка соединения берется из глобальных настроек приложения. Всем спасибо за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2008, 17:55 |
|
||
|
Временные таблицы и ADO.NET
|
|||
|---|---|---|---|
|
#18+
да блииин, ещё раз говорю - пулинг не означает что у тебя будет одно одинаковое на всех соединение. Новые соединения могут создаваться в любой момент по запросу, а старые закрываться, и тебя это не должно волновать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2008, 18:42 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=82&tid=1352253]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 287ms |

| 0 / 0 |
