Нетривиальный пример работы с базами данных в VB.NET (часть 2)
Private Sub btnQuery_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuery.Click Try dbCmd.CommandText = txtQuery.Text dbReader=dbCmd. ExecuteReader (CoimandBehavior. Singl eResult) ' Получить схему таблицы Dim dtbllnfo As DataTable = dbReader.GetSchemaTable() ' Служебная переменная для перебора записей Dim rwRow As DataRow Dim strHeaders As System.Text.StringBuilder – _ New System.Text.StringBuilder() Dim strData As System.Text.StringBuilder = New _ System.Text.StringBuilder() Dim typTypesCdtbllnfo.Columns.Count) As Type Dim intCounter As Integer = 0 ' Перебрать все записи метаданных For Each rwRow In dtblInfo.Rows ' Определить тип typTypes(intCounter)= rwRow("DataType") intCounter +=1 ' Включить в строку имя поля strHeaders.Append("<" & rwRow(0) & ">" & vbTab) Next ' Занести в список заголовочную строку 1stData.Items.Add(strHeaders.ToString()) ' Перебор записей данных Do While dbReader.Read() ' Перебор полей записи For intCounter = 0 To (dbReader.FieldCount -1) ' Включить содержимое поле в выходную строку strData.Append(GetProperType(dbReader,intCounter,_ typTypes(intCounter)) & vbTab) Next ' Включить строку в список 1stData.Items.Add(strData.ToString()) ' Очистить объект StringBuilder strData = New System.Text.StringBuilder() Loop Catch except As Exception MsgBoxt"Error:" & except.Message) End Try End Sub ' Функция получает данные конкретного столбца. Private Function GetProperType(ByVal dr As SqlDataReader. ByVal intPos As Integer, ByVal typType As Type) As Object ' Проверить тип поля, затем получить значение Select Case typType.Name Case "String" ' Преобразовать и вернуть Return CType(dr.GetString(intPos).String) Case "Int32" ' Преобразовать и вернуть Return CType(dr.Get!nt32(intPos). Int32) ' Здесь следовало бы организовать проверку всех ' остальных типов и возврат соответствующих значений. ' Мы выбрали простой путь и ограничились проверкой ' двух самых распространенных типов Case Else Return "<Unsupported Type>" End Select End Function End Class 'При нажатии кнопки в объект команды SQL 'заносится текст, введенный пользователем в текстовом поле: dbCmd.CommandText = txtQuery.Text
(в настоящем примере пропущена проверка данных, необходимая в любой реальной программе).
Далее объявляются объекты, используемые при чтении и выводе имен полей и их значений:
Dim dtbllnfo As DataTable = dbReader.GetSchemaTable() Dim rwRow As DataRow Dim strHeaders As System.Text.StringBuilder = New _ System.Text.StringBuilder() Dim strData As System.Text.StringBuilder = New _ System.Text.Stri ngBui1der() Dim typTypes(dtblInfo.Columns.Count) As Type