본문 바로가기

Programming

데이터 리더를 데이터셋으로 변환

Public Function convertDataReaderToDataSet(ByVal reader As SqlClient.SqlDataReader) As DataSet
2        Dim dataSet As DataSet = New DataSet
3        Dim dataRow As DataRow
4        Dim columnName As String
5        Dim column As DataColumn
6        Dim schemaTable As DataTable
7        Dim dataTable As DataTable
8
9        Do
10            ' Create new data table
11            schemaTable = reader.GetSchemaTable
12            dataTable = New DataTable
13            If Not IsDBNull(schemaTable) Then
14                ' A query returning records was executed
15                Dim i As Integer
16                For i = 0 To schemaTable.Rows.Count - 1
17                    dataRow = schemaTable.Rows(i)
18                    ' Create a column name that is unique in the data table
19                    columnName = dataRow("ColumnName")
20                    'Add the column definition to the data table
21                    column = New DataColumn(columnName, CType(dataRow("DataType"), Type))
22                    dataTable.Columns.Add(column)
23                Next
24                dataSet.Tables.Add(dataTable)
25
26                'Fill the data table we just created
27                While reader.Read()
28                    dataRow = dataTable.NewRow()
29                    For i = 0 To reader.FieldCount - 1
30                        dataRow(i) = reader(i)
31                    Next
32                    dataTable.Rows.Add(dataRow)
33                End While
34            Else
35                'No records were returned
36                column = New DataColumn("RowsAffected")
37                dataTable.Columns.Add(column)
38                dataSet.Tables.Add(dataTable)
39                dataRow = dataTable.NewRow()
40                dataRow(0) = reader.RecordsAffected
41                dataTable.Rows.Add(dataRow)
42            End If
43        Loop While reader.NextResult()
44        Return dataSet
45    End Function