Здравствуйте, woto, Вы писали:
W>Здравствуйте.
W>Пожалуйста, подскажите каким образом можно вернуть количество возвращаемых записей после SELECT'a. В книге четко говорится, что вы не прочитаете значения переменных пока не выполните SqlDataReader.Close(), а мне надо создать массив чтобы заполнить его записями, но какой длиный я не знаю, замкнутый круг какой-то.
Используй динамические массивы. Массивы с фиксированной длинной — плохой тон.
Пожалуйста, подскажите каким образом можно вернуть количество возвращаемых записей после SELECT'a. В книге четко говорится, что вы не прочитаете значения переменных пока не выполните SqlDataReader.Close(), а мне надо создать массив чтобы заполнить его записями, но какой длиный я не знаю, замкнутый круг какой-то.
W>Пожалуйста, подскажите каким образом можно вернуть количество возвращаемых записей после SELECT'a. В книге четко говорится, что вы не прочитаете значения переменных пока не выполните SqlDataReader.Close(), а мне надо создать массив чтобы заполнить его записями, но какой длиный я не знаю, замкнутый круг какой-то.
выполнить два SELECT-а :
один SELECT count(*) from ...
из него узнать кол-во ожидаемых записей
второй — собственно возвращающий записи
а еще лучше использовать не массив а ArrayList какой-нить
Здравствуйте, -arra-, Вы писали:
A>выполнить два SELECT-а : A>один SELECT count(*) from ... A>из него узнать кол-во ожидаемых записей A>второй — собственно возвращающий записи A>а еще лучше использовать не массив а ArrayList какой-нить
Ну я думал так сделать, но это же дополнительные расходы памяти, конечно в рамках моего проекта это совершенно побарабану прокатит и так , но разве не надо стремится к правильному использованию памяти и все такое, это я про ArrayList
А насчет первого решения я просто не знаю это скажется на производительности sql сервера? Т.е. произойдет выборка, подсчет строк, а потом опять выборка?
W>А насчет первого решения я просто не знаю это скажется на производительности sql сервера? Т.е. произойдет выборка, подсчет строк, а потом опять выборка?
Нормально скажется. Если у тебя ключ в таблице есть.
Если ключ есть, то запрос на кол-во строк не в таблице ищет, а по ключу — что гораздо быстрее.
Здравствуйте, -arra-, Вы писали:
W>>Пожалуйста, подскажите каким образом можно вернуть количество возвращаемых записей после SELECT'a. В книге четко говорится, что вы не прочитаете значения переменных пока не выполните SqlDataReader.Close(), а мне надо создать массив чтобы заполнить его записями, но какой длиный я не знаю, замкнутый круг какой-то. A>выполнить два SELECT-а : A>один SELECT count(*) from ... A>из него узнать кол-во ожидаемых записей
Это не правильно. Кол-во записей между этими выборкми может измениться. Либо надо выполнять эти два запроса с блокировкой — что тоже не фонтан.
A>второй — собственно возвращающий записи A>а еще лучше использовать не массив а ArrayList какой-нить
Единственно верный вариант. Задумываться над правильным или неправильным использованием памяти в данном случае — нонсенс. Автору топика незнакомо слово BufferOverflow ?
Re[3]: Вернуть количество записей
От:
Аноним
Дата:
08.10.04 21:19
Оценка:
Здравствуйте, woto, Вы писали:
W>А насчет первого решения я просто не знаю это скажется на производительности sql сервера? Т.е. произойдет выборка, подсчет строк, а потом опять выборка?
Здорово скажется, если запрос посложнеее чем SELECT * FROM table, потому как сервер практически два раза выполнит запрос, точнее два совершенно разных запроса.
Здравствуйте, lozzy, Вы писали:
L>Это не правильно. Кол-во записей между этими выборкми может измениться. Либо надо выполнять эти два запроса с блокировкой — что тоже не фонтан.
И все же это правильный ответ
select
count(*) as counter
from
( select ...
from ...
where ... );
/
Если постановкой прописана логика работы клиента именно с зафиксированным набором данных на начало транзакции выручат snapshot или temporary table
Здравствуйте, Альт, Вы писали:
А>И все же это правильный ответ
Вы бы хоть сначала выяснили что за сервер, а потом уже с блокировками и snapshot'ами разбирались...
С каких пор описание чужой проблемы и ее окружения стала моей проблемой.
Я работаю с ораклом.
Ведь если подумать, то и на фразу:
>создать массив, чтобы заполнить его записями, но какой длиный я не знаю
Я могу ответить, что правильнее пользоваться динамическими массивами. Тогда, сколько бы не вернул сервер записей. Я всегда буду иметь возможность отфетчить их все.
M>Вы бы хоть сначала выяснили что за сервер, а потом уже с блокировками и snapshot'ами разбирались...
Здравствуйте, Альт, Вы писали:
А>С каких пор описание чужой проблемы и ее окружения стала моей проблемой.
С тех пор как ты начал пытаться решить чужую проблему...
А>Я работаю с ораклом.
У всех свои недостатки...
>>создать массив, чтобы заполнить его записями, но какой длиный я не знаю А>Я могу ответить, что правильнее пользоваться динамическими массивами. Тогда, сколько бы не вернул сервер записей. Я всегда буду иметь возможность отфетчить их все.
Так вот это и было бы правильным ответом.
Здравствуйте, Merle, Вы писали:
А>>С каких пор описание чужой проблемы и ее окружения стала моей проблемой. M>С тех пор как ты начал пытаться решить чужую проблему...
В этом вопросе я был не прав. буду стараться.