Всем привет.
Перхожу помаленьку с VB6 на VBV.NET
Не могу найти свойство которое отвечает за кол-во записей в возвращаемом наборе.
Dim rs As System.Data.SqlClient.SqlDataReader
Con.Open()
sql_cmd.CommandText = "select * from account_value order by id"
rs = sql_cmd.ExecuteReader
Dim x1(100000) As Double ' а хочется создать массив под точное кол-во данных в рекордсете
While rs.Read
x1(aa) = CDbl(rs(0))
End While
Re: аналог Recordset.RecordCount в NET
От:
Аноним
Дата:
10.05.04 21:38
Оценка:
Здравствуйте, Alexander_fx, Вы писали:
A_>Всем привет. A_>Перхожу помаленьку с VB6 на VBV.NET A_>Не могу найти свойство которое отвечает за кол-во записей в возвращаемом наборе.
A_>
A_> Dim rs As System.Data.SqlClient.SqlDataReader
A_> Con.Open()
A_> sql_cmd.CommandText = "select * from account_value order by id"
A_> rs = sql_cmd.ExecuteReader
A_> Dim x1(100000) As Double ' а хочется создать массив под точное кол-во данных в рекордсете
A_> While rs.Read
A_> x1(aa) = CDbl(rs(0))
A_> End While
A_>
Используй DataAdapter, методом Fill суешь данные в DataSet.
Потом смотри DataTable.Rows.Count
Я VB не знаю, на шарпе: вот так может быть подойдет...
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect,myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myAccessConn.Open();
myDataAdapter.Fill(myDataSet,"Categories");
DataTableCollection dta = myDataSet.Tables;
foreach (DataTable dt in dta)
{
dt.Rows.Count // вот это должно быть твое счастье
// ...
}
У меня база 5 гигов.
Таблицы содержат по 10 000 000 записей.
Я делаю выборки по 50 --- 150 000 записей.
И делать копию таблици для того чтобы узнать сколько в выборке записей выглядит некрасиво.
Давайте я сформулирую задачу заново.
В базе есть таблица с 10 000 000 записями.
Есть запрос на выборку который возвращает 50 000 — 150 000 записей.
Мне нужно заполнить несколько одномерных массивов данными из этой таблицы.
Я делал так. Определял сколько возвратилось записей. Создавал массивы.( по размеру выборки) Заливал их ( с выводом прогрессбара опять таки по размеру выборки)
Теперь не знаю как мне быть в NET
Re[4]: Блин но не все так просто, новые требования
В DataReader нельзя получить количество записей.
Более удобный вариант — сделать запрос на количесво записей, а потом послать запрос уже на записи.
Re[4]: Блин но не все так просто, новые требования
От:
Аноним
Дата:
10.05.04 23:45
Оценка:
Здравствуйте, Alexander_fx, Вы писали:
A_>У меня база 5 гигов. A_>Таблицы содержат по 10 000 000 записей. A_>Я делаю выборки по 50 --- 150 000 записей. A_>И делать копию таблици для того чтобы узнать сколько в выборке записей выглядит некрасиво.
A_>Давайте я сформулирую задачу заново.
A_>В базе есть таблица с 10 000 000 записями. A_>Есть запрос на выборку который возвращает 50 000 — 150 000 записей. A_>Мне нужно заполнить несколько одномерных массивов данными из этой таблицы.
A_>Я делал так. Определял сколько возвратилось записей. Создавал массивы.( по размеру выборки) Заливал их ( с выводом прогрессбара опять таки по размеру выборки)
A_>Теперь не знаю как мне быть в NET
Есть еще вариант, можно использовать динамический массив.
Мне тут даже подсказали, что называется он ArrayList.
Там есть метод Add. Медленно быть вроде не должно, поскольку
проблем с распределением памяти в .Net пока не встречал.
Только вот с прогресс баром что делать, даже не знаю...
Надо MSDN поковырять может что-нибудь еще придумаю.
Кстати а зачем тебе эти массивы?
Ты ведь все равно данные копируешь в массив.
Используй DataTable вместо массива!
Или я еще чего-то не знаю?
Re[5]: Блин но не все так просто, новые требования
От:
Аноним
Дата:
10.05.04 23:52
Оценка:
Здравствуйте, fist, Вы писали:
F>Здравствуйте, Alexander_fx, Вы писали:
F>[]
F>В DataReader нельзя получить количество записей. F>Более удобный вариант — сделать запрос на количесво записей, а потом послать запрос уже на записи.
Я правильно понимаю: сделать запрос на количесво записей, это речь о COUNT в Transact SQL?
Re[6]: Блин но не все так просто, новые требования
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alexander_fx, Вы писали:
A_>>У меня база 5 гигов. A_>>Таблицы содержат по 10 000 000 записей. A_>>Я делаю выборки по 50 --- 150 000 записей. A_>>И делать копию таблици для того чтобы узнать сколько в выборке записей выглядит некрасиво.
A_>>Давайте я сформулирую задачу заново.
A_>>В базе есть таблица с 10 000 000 записями. A_>>Есть запрос на выборку который возвращает 50 000 — 150 000 записей. A_>>Мне нужно заполнить несколько одномерных массивов данными из этой таблицы.
A_>>Я делал так. Определял сколько возвратилось записей. Создавал массивы.( по размеру выборки) Заливал их ( с выводом прогрессбара опять таки по размеру выборки)
A_>>Теперь не знаю как мне быть в NET
А>Есть еще вариант, можно использовать динамический массив. А>Мне тут даже подсказали, что называется он ArrayList. А>Там есть метод Add. Медленно быть вроде не должно, поскольку А>проблем с распределением памяти в .Net пока не встречал.
А>Только вот с прогресс баром что делать, даже не знаю... А>Надо MSDN поковырять может что-нибудь еще придумаю.
А>Кстати а зачем тебе эти массивы? А>Ты ведь все равно данные копируешь в массив. А>Используй DataTable вместо массива! А>Или я еще чего-то не знаю?
Угу, там заморочек выше крыши
Прога для обработки данных на бирже.
Считываются исторические данные, а потом в реалтайме к массиву доливаются данные.
Без массивов не обойдусь стопудово. Я даже коллекции не могу использовать из за их тормознутости ( 50 000 элементов)
Здравствуйте, fist, Вы писали:
F>Здравствуйте, Alexander_fx, Вы писали:
A_>>Считываются исторические данные, а потом в реалтайме к массиву доливаются данные.
F>А на уровне базы данных эти рассчеты нельзя реализовать?
Нет одназначно.
Там простая выборка данных за период времени. А те данные что доливаем, так их просто нет на момент исполнения запроса.
Проше в массив добавлять элементы ( по 1-5 в секуду) чем с такой частотой делать обновление по базе)