Un titolo un po? lungo :-)
Per varie che siano le cause capita di convertire un oggetto DataReader in un DataTable per fare cò dobbiamo ereditare una classe DbDataAdapter che implementa un set di funzioni per fornire una tipizzazione forte, inoltre eredita maggior parte delle funzionalità necessarie per una completa implementazione di DataAdapter.
Veniamo al codice.
Imports System
Imports System.Data
Imports System.Data.Common
Namespace DataUtil
Public Class DataReaderAdapter
Inherits DbDataAdapter
Protected Overrides Function CreateRowUpdatedEvent(ByVal dataRow As System.Data.DataRow, ByVal command As System.Data.IDbCommand, ByVal statementType As System.Data.StatementType, ByVal tableMapping As System.Data.Common.DataTableMapping) As System.Data.Common.RowUpdatedEventArgs
Return Nothing
End Function
Protected Overrides Function CreateRowUpdatingEvent(ByVal dataRow As System.Data.DataRow, ByVal command As System.Data.IDbCommand, ByVal statementType As System.Data.StatementType, ByVal tableMapping As System.Data.Common.DataTableMapping) As System.Data.Common.RowUpdatingEventArgs
Return Nothing
End Function
Public Function FillFromReader(ByVal DataTable As DataTable, ByVal dataReader As IDataReader) As Int32
Return Me.Fill(DataTable, dataReader)
End Function
Public Function FillSchemaTable(ByVal DataTable As DataTable, ByVal Tipo As SchemaType, ByVal Command As IDbCommand, ByVal Behavior As CommandBehavior) As DataTable
Return Me.FillSchema(DataTable, Tipo, Command, Behavior)
End Function
Protected Overrides Sub OnRowUpdated(ByVal value As System.Data.Common.RowUpdatedEventArgs)
End Sub
Protected Overrides Sub OnRowUpdating(ByVal value As System.Data.Common.RowUpdatingEventArgs)
End Sub
End Class
End Namespace
I metodo che ci servono sono i classici ma con più funzionalità Fill e FillSchema.
L?esempio console per provare:
Imports System.Data
Imports System.Data.SqlClient
Module Module1
Sub Main()
Console.WriteLine("Inizio connessione. Premi Invio per continuare")
Console.ReadLine()
Dim da As SqlDataAdapter
Dim cn As SqlConnection = New SqlConnection("Server=(local);database=Northwind;user id=sa;password=fabio;")
Dim sql As String = "Select * from Employees"
Dim cmd As New SqlCommand(sql, cn)
cn.Open()
Dim dra As DataUtil.DataReaderAdapter = New DataUtil.DataReaderAdapter
Dim DtX As DataTable = dra.FillSchemaTable(New DataTable("mia"), SchemaType.Source, cmd, CommandBehavior.Default)
Dim dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Dim dt As DataTable = New DataTable
dra.FillFromReader(dt, dr)
dr.Close()
Dim i As Int32
For i = 0 To dt.Rows.Count - 1
Console.WriteLine(dt.Rows(i)(1).ToString())
Next
Console.WriteLine("")
Console.WriteLine("Visualizzazione del Mapping. Premere invio.")
Console.ReadLine()
Dim Colonna As DataColumn
For Each Colonna In DtX.Columns
Console.WriteLine("Caption {0} AllowDBNull {1} AutoIncrement {2} AutoIncrementSeed {3} AutoIncrementStep {4} MaxLength {5} DataType {6}", Colonna.Caption, Colonna.AllowDBNull, Colonna.AutoIncrement, Colonna.AutoIncrementSeed, Colonna.AutoIncrementStep, Colonna.MaxLength, Colonna.DataType)
Next
Console.ReadLine()
End Sub
End Module
ciao
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Stampa
Download
10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
