Если я выберу строку

Я сделаю все, что в моих силах, чтобы объяснить это, хотя, по общему признанию, я не пытался многого в течение нескольких месяцев, так что я не только заржавел, но и не хотел быть рядом.

Я использую визуальных веб-разработчиков и asp, vb - это код с базой данных sql.

Если я выбираю столбцы из таблицы, например:

sqlCmd.CommandText = "SELECT Username, W1, W2, W3, W4 FROM tablename"

Скажем, в этой таблице есть несколько строк с данными в этих столбцах.

Когда я делаю datareader, или как мне показали, я объявляю dr как:

Dim dr As Data.SqlClient.SqlDataReader

Я могу работать с выбранными элементами, такими как:

dr.item(0)
dr.item(1)

и т. д.

Но единственные элементы, с которыми я могу работать, - это первый ряд выбранных элементов. Как выделить все строки в таблице. Или как я могу работать с данными из нескольких строк, используя dr.item или каким-то образом сообщая ему о переходе на следующую строку, чтобы dr.item(0) стал именем пользователя для второй строки в таблице.

Я надеюсь, что это имело смысл, и я извиняюсь, если это глупый вопрос. Я ценю время и помочь заранее. Спасибо ребята.


person BradtotheBone    schedule 01.09.2012    source источник


Ответы (2)


SqlDataReader.Read переводит средство чтения к следующему запись и возвращает true, когда есть хотя бы одна другая строка:

Using conn = New SqlClient.SqlConnection(connString)
    Using cmd = New SqlClient.SqlCommand("SELECT Username, W1, W2, W3, W4 FROM tablename", conn)
        conn.Open()
        Using dr = cmd.ExecuteReader()
            While dr.Read()
                Dim UserName As String = dr.GetString(0)
                ' ... '
            End While
        End Using
    End Using        
End Using

Используйте Using, чтобы избавиться от всего, что реализует IDisposable, как можно скорее. Это также будет закрывать соединения неявно.

Редактировать: используя DataTable

Как выделить все строки в таблице

Приведенный выше подход DataReader работает хорошо, но если вы все равно хотите выбрать все строки и можно загрузить все в память, вы можете вместо этого использовать DataTable. Затем вы также можете получить доступ к каждой строке через индексатор, такой как массив или список:

Dim tblUsers = New DataTable()
Using conn = New SqlClient.SqlConnection(connString)
    Using da = New SqlClient.SqlDataAdapter("SELECT Username, W1, W2, W3, W4 FROM tablename", conn)
        da.Fill(tblUsers)
    End Using
End Using
' access a row via index: '
Dim row10 As DataRow = tblUsers.Rows(9)
Dim user10 = row10.Field(Of String)("Username")
' of course you can also iterate all rows: '
For Each row As DataRow In tblUsers.Rows
    Dim userName = row.Field(Of String)("Username")
Next
person Tim Schmelter    schedule 01.09.2012
comment
Я получаю сообщение об ошибке, говорящее, что я пытаюсь вызвать чтение, когда читатель закрыт. Я уверен, что это недосмотр с моей стороны, я продолжу работать над этим и, надеюсь, скоро у меня будут хорошие новости. Спасибо за помощь, скоро вернусь с результатами. - person BradtotheBone; 02.09.2012
comment
Вы не можете использовать ридер, когда он закрыт (после Using). Таким образом, вы должны прочитать считыватель в Using-Statement и присвоить значения где-нибудь (например, пользовательский класс User или DataTable) или вернуть их из метода. - person Tim Schmelter; 02.09.2012
comment
Красиво, ясно, лаконично...ты мужчина. Я ценю помощь. - person BradtotheBone; 02.09.2012

Чтобы перебрать строки таблицы данных, вам нужно использовать следующий метод:

while dr.read()
 Dim col1=dr.item(0)
 Dim col2=dr.item(1)
End while

Так что вы можете каждый атрибут ВСЕХ строк.

person djadmin    schedule 01.09.2012