Convertire un DataReader in un DataTable, e ottenere il Mapping direttamente in un oggetto DataTable senza l?oggetto DataSet

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

Nella stessa categoria
    Nessuna risorsa collegata

    Commenti

    Aggiungi un nuovo commento »»»
    Per inserire un commento, devi registrarti alla nostra community.

    © 1998-2008 - dracula - Il blog di Fabio "dracula" Civerchia

    TagCloud
    BLOG INFO
    • Post: 26
    • Commenti: 5
    • TrackBacks: 2
    • Feed blog e contenuti tecnici: RSS
    • Feed blog: RSS Atom OPML
    CATEGORIE
    I PIÙ LETTI DEL MESE
    IN EVIDENZA