Страница: 1 |
Страница: 1 |
Вопрос: о БД...
Добавлено: 01.05.06 03:17
Автор вопроса: SystemDevil
Привет всем.
возможно делать выборку данных с БД не в datagrid?
как данные забить в масив? потом мне ети данные пойдут в текстбоксы и лист боксы. можно по идеи забивать в датагрид а потом из нее в масивы, но ето чуть криво помойму. кто че посоветует?
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
enkie
ICQ: 3112212350
Вопросов: 0
Ответов: 4
Профиль | | #1
Добавлено: 02.05.06 05:53
да можно через XML, делаеш образ представления бокса (любого) и форматируеш как надо.........
Номер ответа: 2
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #2
Добавлено: 15.05.07 11:39
То же что и HACKER сказал тока по подробнее:
Dim conn As New OleDbConnection() 'соединение с базой
 im cmd As New OleDbCommand() 'команда SQL
 im rid As OleDbDataReader
 im i As Short
Dim mass(100) As String
'оформляем подключение к базе
conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "ata Source=db2.mdb"
conn.Open()
'от тобе и запрос
cmd = New OleDbCommand("SELECT tb.* FROM tb;"
cmd.Connection() = conn
rid = cmd.ExecuteReader(CommandBehavior.SingleResult)
i = 0
'заполняем
 o While rid.Read
mass(i) = rid.GetString(0)
i += 1
Loop
'Очистка памяти. Мусорить нехорошо
rid.Close()
cmd.Cancel()
conn.Close()
GC.Collect()
Сразу в массив, безо всяких причандалов для лентяев
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 15.05.07 13:47
А откуда знаете, что записей будет 101, а не 200 или 50?
Лучше используйте List(Of String).
Это лишнее. GC сам разберется, когда мусор собрать.
Номер ответа: 4
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #4
Добавлено: 15.05.07 15:12
нууу я ж для примера.
с первым замчанием вполне согласен.
А вот второе замечание весьма и весьма интересно, давно ли GC научился сам в соответствии с реальными ресурсами работать???
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 15.05.07 15:58
Неуправляемый ресурс (соединение с БД) освободится при вызове Close.
А память, занимаемая управляемыми ресурсами, GC освободит в
соответствии с логикой своей работы.
Номер ответа: 6
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #6
Добавлено: 15.05.07 22:56
Для этих целей есть datatable
....
....
Dim dt As New DataTable("MoyaTabliza"
dt.Columns.Add("Colonna1", GetType(System.Int32))
dt.Columns.Add("Colonna2", GetType(System.String))
Dim dr As DataRow
Do While rid.Read
dr = dt.NewRow
dr("Colonna1" = DirectCast(rid(0), int32)
dr("Colonna2" = DirectCast(rid(1), string)
dt.Rows.Add(dr)
Loop
.....
.....
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 16.05.07 13:07
Если уж использовать DataTable, то проще будет вместо DataReader
испоьзовать DataAdapter.
Номер ответа: 8
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #8
Добавлено: 16.05.07 13:47
Хм...
Если вопрос стоял только в заполнении массива, то зачем лишняя возьня с DataTable?
То: Павел
И все равно не верю я логике работы мусорщика, когда ресурсов в обрез, лучше самому почесаться насчет пары свободных килограммов оперативки...
ЗЫ: Вроде самому смешно, килобайты экономить, а ниче с собой поделать немогу.
Номер ответа: 9
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #9
Добавлено: 16.05.07 15:14
обрез, лучше самому почесаться насчет пары свободных килограммов
оперативки...
Вызов GC отнимает время. Частые необоснованные вызовы GC будут создавать
дополнительны тормоза. Что для тебя важнее - пара лишних килобайт в
памяти или скорость работы программы?
В общем случае GC лучше разберется, когда и как освобожать память.
Вмешиваться в его работы нужно лишь в редких случаях, где это
действительно обосновано (скажем, можно вызвать GC перед участком
кода, на котором не должно быть снижения быстродейсвия, вызванного
внезапной сборкой мусора).
В общем, не уверен - не обгоняй!
Номер ответа: 10
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 16.05.07 21:26
Вряд ли он бы стал беспокоиться из-за пары килобайт, скорее, речь идет о десятках метров. А своп сожрет любую производительность.
Номер ответа: 11
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #11
Добавлено: 17.05.07 07:48
О десятках метров GC позаботится сам.
Да и неоткуда там быть десяткам метров. Эти объекты, которые он
создавал, больше килобайта памяти не займут.
Номер ответа: 12
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #12
Добавлено: 17.05.07 17:20
Ладно, вам люди спорить.
Давайте просто приведу цифры с которыми сам сталкивался.
"Чистое приложение" (в смысле приложение которое осуществляет одну функцию - правильно завершится)съедает порядка ~5 метров
"Чистая форма" ~ 8,5 метров
Форма активно использующая бд (тем паче аксес)без принудительного вызова мусорщика ~15,5 метров
Эта же форма, только в конце каждого обращения к бд, вызов gc ~11 метров
В больших приложениях можно отбить у .NET до 55 метров. (Больше отобрать не получалось )
Вот это я видел своими глазами, а спорить, надо вызывать принудительно, или нет, бессмыслено, если речь идет о программировании для современных машин, там и оперативки навалом и камень не слабый.
Номер ответа: 13
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #13
Добавлено: 17.05.07 17:28
Правда, не понял, что видел.
Номер ответа: 14
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #14
Добавлено: 17.05.07 17:33
Такое может быть, если память забита DataTable'ами, коллекциями объектов, массивами и т.п. Но в вышеуказанном примере GC освободит только OleDbConnection и OleDbCommand, которые бли созданы по глупости вот в этом куске кода и вообще никак не использовались:
Dim cmd As New OleDbCommand() 'команда SQL
Другие объекты, ссылки на которые объявлены в этом куске кода, не освободятся GC, т.к. ссылки на них еще существуют. Они бы освободились, если перед GC.Collect указать
cmd = Nothing
rid = Nothing
В общем, если уж приводишь какие-то цифры и факты, то надо чистые эксперименты делать. А не думать, что если где-то ручной вызов сборки мусора помог уменьшить объем занимаемой памяти (хотя сожет это и не он помог ), то и везде он будет так же шикарно работать. Тогда надо через строчку втыкать "GC.Collect" и вообще летать всё будет