Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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() 'соединение с базой
        ;Dim cmd As New OleDbCommand() 'команда SQL
        ;Dim rid As OleDbDataReader
        ;Dim i As Short
Dim mass(100) As String
       
        'оформляем подключение к базе
        conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & ";Data Source=db2.mdb";)
        conn.Open()
'от тобе и запрос
        cmd = New OleDbCommand("SELECT tb.* FROM tb;";)
        cmd.Connection() = conn
        rid = cmd.ExecuteReader(CommandBehavior.SingleResult)
        i = 0
        'заполняем
        ;Do 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-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 15.05.07 13:47
Dim mass(100) As String


А откуда знаете, что записей будет 101, а не 200 или 50?
Лучше используйте List(Of String).


GC.Collect()


Это лишнее. GC сам разберется, когда мусор собрать.

Ответить

Номер ответа: 4
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #4 Добавлено: 15.05.07 15:12
нууу я ж для примера.
с первым замчанием вполне согласен.
А вот второе замечание весьма и весьма интересно, давно ли GC научился сам в соответствии с реальными ресурсами работать???

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #9
Добавлено: 16.05.07 15:14
И все равно не верю я логике работы мусорщика, когда ресурсов в
обрез, лучше самому почесаться насчет пары свободных килограммов
оперативки...

Вызов GC отнимает время. Частые необоснованные вызовы GC будут создавать
дополнительны тормоза. Что для тебя важнее - пара лишних килобайт в
памяти или скорость работы программы?
В общем случае GC лучше разберется, когда и как освобожать память.
Вмешиваться в его работы нужно лишь в редких случаях, где это
действительно обосновано (скажем, можно вызвать GC перед участком
кода, на котором не должно быть снижения быстродейсвия, вызванного
внезапной сборкой мусора).

В общем, не уверен - не обгоняй!

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 16.05.07 21:26
Вряд ли он бы стал беспокоиться из-за пары килобайт, скорее, речь идет о десятках метров. А своп сожрет любую производительность.

Ответить

Номер ответа: 11
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #14
Добавлено: 17.05.07 17:33
Такое может быть, если память забита DataTable'ами, коллекциями объектов, массивами и т.п. Но в вышеуказанном примере GC освободит только OleDbConnection и OleDbCommand, которые бли созданы по глупости вот в этом куске кода и вообще никак не использовались:

Dim conn As New OleDbConnection() 'соединение с базой
        Dim cmd As New OleDbCommand() 'команда SQL


Другие объекты, ссылки на которые объявлены в этом куске кода, не освободятся GC, т.к. ссылки на них еще существуют. Они бы освободились, если перед GC.Collect указать

conn = Nothing
cmd = Nothing
rid = Nothing


В общем, если уж приводишь какие-то цифры и факты, то надо чистые эксперименты делать. А не думать, что если где-то ручной вызов сборки мусора помог уменьшить объем занимаемой памяти (хотя сожет это и не он помог ;) ), то и везде он будет так же шикарно работать. Тогда надо через строчку втыкать "GC.Collect" и вообще летать всё будет :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам