2012-09-01 2 views
0

나는 이것을 설명하기 위해 최선을 다할 것입니다. 그러나 나는 수개월에 많은 시도를하지 않았으므로 녹슬지 않아서 나는 잘 지내지 않았습니다.내가 행을 선택하면

Visual Web Developer와 ASP를 사용하고 있습니다. VB는 SQL DB가있는 코드입니다.

나는 예를 들어, 테이블에서 열을 선택하는 경우 :

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

는이 컬럼에서 데이터를이 테이블에 여러 행이 말.

나는 DataReader를 할, 또는 내가 보여왔다 방법처럼, 나는 박사를 선언 할 때 : 나는 같은 선택 항목으로 작업 할 수

Dim dr As Data.SqlClient.SqlDataReader 

:

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

하지만 내가 사용할 수있는 항목은 선택한 항목의 첫 번째 행뿐입니다. 테이블의 모든 행을 선택하려면 어떻게합니까? 또는 dr.item을 사용하여 여러 행의 데이터로 작업하거나 dr.item (0)이 테이블의 두 번째 행에 대한 사용자 이름이되도록 다음 행으로 이동하라는 의미로 어떻게 작업 할 수 있습니까?

나는 어리석은 질문 인 경우에 그것이 의미를 가지기를 바라고 미안하다. 시간을내어 감사 드리며 사전에 도와주세요. 고마워.

답변

4

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 
+0

독자가 닫힌 상태에서 읽음을 호출하려고한다는 오류가 나타납니다. 나는 그것이 나의 감독에 대한 감독이라는 것을 확신한다, 나는 그것에 계속 노력할 것이고, 희망적으로 나는 곧 좋은 소식을 가질 것이다. 도움을 주셔서 감사 드리며 곧 결과가 나올 것입니다. – BradtotheBone

+0

리더가 닫혀있을 때 ('사용'이후) 사용할 수 없습니다. 따라서'Using-Statement'에서 독자를 읽고 어딘가에 값을 할당하거나 (예 : 사용자 정의 클래스'User' 또는 DataTable) 메소드에서 값을 반환해야합니다. –

+0

아름답고 명료하며 간결한 ... 당신은 그 사람입니다. 도움에 감사드립니다. – BradtotheBone

1

다음과 같은 방법을 사용할 필요가 데이터 테이블의 행을 반복하려면 : 그래서 할 수 있습니다 각각

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

을 모든 행의 속성.

관련 문제