powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка
22 сообщений из 22, страница 1 из 1
Ошибка
    #39124932
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите найти ошибку:
Код: c#
1.
2.
3.
4.
Cmd_B.CommandText = @"create table #test([id] int identity(1,1), [value] int)";
Cmd_B.ExecuteNonQuery;
Cmd_B.CommandText = "select [cmd] = count(*) from #test";
Int32 k = (Int32)Cmd_B.ExecuteScalar();


первый запрос исполняется без проблем, а вот во втором - ошибка: Invalid object name '#test'.
если убираешь # (не временная таблица, а постоянная) - всё работает.
в чем проблема?
...
Рейтинг: 0 / 0
Ошибка
    #39124938
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в разных батчах потому что
...
Рейтинг: 0 / 0
Ошибка
    #39124944
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneв разных батчах потому что
Так ведь внутри ОДНОГО коннекта
...
Рейтинг: 0 / 0
Ошибка
    #39124948
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=Konst_Oneв разных батчах потому что
Так ведь внутри ОДНОГО коннекта
Connection один, а scope разный. Потому и вылетает ошибка.
...
Рейтинг: 0 / 0
Ошибка
    #39124950
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=Konst_Oneв разных батчах потому что
Так ведь внутри ОДНОГО коннекта
Проверь что это действительно так
Код: c#
1.
select @@SPID
...
Рейтинг: 0 / 0
Ошибка
    #39124959
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот если сделать так, то работает!!!
Код: c#
1.
2.
3.
4.
5.
6.
7.
using (SQLCommand Cmd = new SQLCommand("", Conn))
{
     Cmd.CommandText = @"create table #test([id] int identity(1,1), [value] int)";
     Cmd.ExecuteNonQuery;
     Cmd.CommandText = "select [cmd] = count(*) from #test";
     Int32 k = (Int32)Cmd.ExecuteScalar();
}
...
Рейтинг: 0 / 0
Ошибка
    #39124960
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron=Сергей=пропущено...

Так ведь внутри ОДНОГО коннекта
Connection один, а scope разный. Потому и вылетает ошибка.
Ни причем тут scope. Это же #test а не @test
так не сработает
Код: sql
1.
2.
3.
declare @test table([id] int identity(1,1), [value] int)
go
select [cmd] = count(*) from @test


а так работает
Код: sql
1.
2.
3.
create table #test([id] int identity(1,1), [value] int)
go
select [cmd] = count(*) from #test
...
Рейтинг: 0 / 0
Ошибка
    #39124964
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНи причем тут scope.
Активный scope как раз и причем.
...
Рейтинг: 0 / 0
Ошибка
    #39124976
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronDima TНи причем тут scope.
Активный scope как раз и причем.
Это особенность чего? C#? Где почитать можно?

Пользую временные таблицы (#test) и ни разу с подобной проблемой не сталкивался. Работает стабильно пока соединение не рвется.
Из C# к MS SQL пока не пробовал цепляться, но в будущем актуально. Не хотелось бы на подобные грабли наступить.
...
Рейтинг: 0 / 0
Ошибка
    #39124983
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй ##test
такие таблицы будут распространяться на соединение
...
Рейтинг: 0 / 0
Ошибка
    #39124988
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proиспользуй ##test
такие таблицы будут распространяться на соединениесорри, я наврал, такая таблица будет видна всем
...
Рейтинг: 0 / 0
Ошибка
    #39124999
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего ADO делает пулы коннектов внутри себя и может использовать разные коннекты по каким-то причинам. Я с таким сталкивался, когда работал с курсорами, как раз-таки временная таблица выпадала из области видимости.
Выполняй один запрос, зачем в данном случае его разбивать на два???
...
Рейтинг: 0 / 0
Ошибка
    #39125004
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто особенность чего? C#? Где почитать можно?
тут
...
Рейтинг: 0 / 0
Ошибка
    #39125007
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего ты производишь на этом коннекте еще какие-то операции, и если у тебя там остался незакрытый рекордсет, то при выполнении нового запроса коннекшн (внутри АДО) будет клонирован. А когда в варианте с using ты используешь отдельный коннект для этой пары операций, такого не происходит.
...
Рейтинг: 0 / 0
Ошибка
    #39125012
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proскорее всего ты производишь на этом коннекте еще какие-то операции, и если у тебя там остался незакрытый рекордсет, то при выполнении нового запроса коннекшн (внутри АДО) будет клонирован. А когда в варианте с using ты используешь отдельный коннект для этой пары операций, такого не происходит.
Нет, на самом деле открытый один коннект не гарантирует одной области видимости при выполнении команд с временными таблицами.
...
Рейтинг: 0 / 0
Ошибка
    #39125020
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Программное создание таблиц - ЗЛО
...
Рейтинг: 0 / 0
Ошибка
    #39125023
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronDima TЭто особенность чего? C#? Где почитать можно?
тут
Если правильно понял @fparam1 у него теряется из-за scope.

Это объяснение правдоподобнее
Shocker.ProСкорее всего ADO делает пулы коннектов внутри себя и может использовать разные коннекты по каким-то причинам.
...
Рейтинг: 0 / 0
Ошибка
    #39125031
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Конекшн в данном примере как бы и не закрывался... А вот если он закрыл и открыл бы его опять, то, да, конекше был бы взят из пула коннекций с другой областью видимости. Так что эта теория не объясняет проблемы.
...
Рейтинг: 0 / 0
Ошибка
    #39125035
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronКонекшн в данном примере как бы и не закрывался...Коннекшн с точки зрения ADO (Connection) и коннекшн с точки зрения сервера (SPID) не обязательно эквивалентны.
...
Рейтинг: 0 / 0
Ошибка
    #39125040
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAxeleronКонекшн в данном примере как бы и не закрывался...Коннекшн с точки зрения ADO (Connection) и коннекшн с точки зрения сервера (SPID) не обязательно эквивалентны.
Я в принципе не очень-то и понял что именно ТС сделал, что у него заработало. Если стал использовать IDisposable SqlCommand'ы, то там никакой разницы, которая влияет на область видимости временной таблицы, быть не может.
...
Рейтинг: 0 / 0
Ошибка
    #39125044
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronDima T,
Конекшн в данном примере как бы и не закрывался... А вот если он закрыл и открыл бы его опять, то, да, конекше был бы взят из пула коннекций с другой областью видимости. Так что эта теория не объясняет проблемы.
Временная таблица (#temp) видна только в одном коннекшене (в котором ее создали), соответственно если запрос к этой таблице будет через другой коннекшн то будет ошибка Invalid object name '#test' (Еще хуже если она там тоже будет но с другой инфой). При этом оба коннекшена остаются открыты. Тут тоже самое написано 18540875

Теперь понятно. Проблема именно в пуле. Просто не знал что создается пул соединений. Работаю из фокспро, там сколько явно создал - столько и пользуешь.
...
Рейтинг: 0 / 0
Ошибка
    #39125049
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronЯ в принципе не очень-то и понял что именно ТС сделал, что у него заработало. Если стал использовать IDisposable SqlCommand'ы, то там никакой разницы, которая влияет на область видимости временной таблицы, быть не может.Он выделил ОТДЕЛЬНЫЙ коннекшн под эти две операции. Так как других операций с этим коннекшеном не производилось, ADO использовал для него один и тот же SPID. А в первом примере, который наверняка приведен не полностью, ТС скорее всего делал еще какие-то манипуляции до или во время этих операций.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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