Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    DataAdapter e Fill(...)

    Ho generato un Dataset utilizzando un semplice xsd.
    Questo dataset deriva da una query abbastanza complessa, query
    che mette in join 4 tabelle.
    Oltre al dataset utilizzo un factory per istanziare un DataAdapter.
    Questa classe factory ritorna l'interfaccia IDbDataAdapter associata al DataAdapter (OleDb, Odbc...) istanziato. Quale tipo istanziare viene determinato attraverso delle configurazioni in modo da poter utilizzare nella stessa applicazione tutti i possibili tipi.. sia per DataAdapter che per i command i parameter ecc..

    Il problema sorge quando cerco di eseguire il metodo Fill del data adapter passandogli il dataset. Per l'interfaccia IDbDataAdapter esiste un solo metodo Fill(DataSet ds), mentre per i vari tipi (OleDb,Odbc..) i metodi sono molti di più, in particolare Fill(DataSet ds,String tblName).

    Se cerco di utilizzare l'interfaccia e quindi il metodo Fill con un solo argomento non vengono sollevate eccezioni, ma il dataset non viene popolato. Castando il data adapter al tipo corretto ed eseguendo il metodo Fill con i due argomenti tutto fila liscio e viene popolato.

    Mi sapete spiegare che accade? e soprattutto... come posso eseguire il Fill partendo solo dall'interfaccia IDbDataAdapter?? Esiste un modo alternativo per specificare il nome della/e tabella/e prima di invocare il Fill??

    please help me.
    Credo che il linguaggio sia indifferente.. cmq .. C#.
    tnx!!
    ► ☺ ◄

  2. #2
    up
    ► ☺ ◄

  3. #3
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Ciao patrix, anche se in ritardo...

    In teoria la fill sull'interfaccia con argomento il dataset destinatario dovrebbe comunque funzionare ed impostarti il nome della datatable sul valore di default (non ricordo quale) comunque differente da quello della tabella originale, proprio perchè non c'è un legame vero e proprio tra la tabella del database e la DataTable che viene generata.

    Dopo aver eseguito la Fill tramite l'interfaccia prova ad interrogare il dataset così:

    codice:
    MyDataSet.Tables(0).Rows.Count
    anzichè

    codice:
    MyDataSet.Tables("NomeTabellaDB").Rows.Count

    Esiste un modo alternativo per specificare il nome della/e tabella/e prima di invocare il Fill??
    Usando le interfacce lui CREA una datatable col valore di default al volo nel dataset e ci butta dentro i dati, percui non puoi assegnare il nome prima ad un dataset che non è ancora stato creato.
    In compenso puoi farlo dopo...

    codice:
    DataSet11.Tables(0).TableName = "Customers"

    Comunque non mi sembra sbagliata neanche l'idea di castare il tipo di dataadapter per poter sfruttare metodi e proprietà specifiche

    Spero di esserti stato un pochino d'aiuto...
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  4. #4
    mmmm il problema è questo...
    utilizzando l'interfaccia.. "non filla" proprio nulla, non ricevo eccezioni, ma non viene creata alcuna tabella...
    cosa che invece riesce senza problemi con il data adapter castato e il metodo con 2 argomenti..

    hai qualche idea del perchè??
    ► ☺ ◄

  5. #5
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim da As IDbDataAdapter
    da = New SqlDataAdapter("SELECT * FROM Customers", SqlConnection1) 'Per brevità...
    Dim ds As New DataSet
    Try
    da.Fill(ds)
    MessageBox.Show("Tabelle: " + ds.Tables.Count.ToString)
    MessageBox.Show("Nome di default: " + ds.Tables(0).TableName)
    MessageBox.Show("Righe nella tabella: " + ds.Tables(0).Rows.Count.ToString)
    Finally
    If Not SqlConnection1.State = ConnectionState.Closed Then SqlConnection1.Close()
    End Try
    End Sub
    A me và...

    Magari non ho capito cosa intendi...
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  6. #6

    Re: DataAdapter e Fill(...)

    Originariamente inviato da patrix03
    Ho generato un Dataset utilizzando un semplice xsd.
    Questo dataset deriva da una query abbastanza complessa,
    in che senso "deriva"?
    query
    che mette in join 4 tabelle.
    un metodo alternativo e' popolare le singole tabelle e gestirne le relazioni utilizzando gli oggetti datarelation.
    Se ogni volta devi "castare" il datadapter nel tipo giusto se non sbaglio perdi l'indipendenza dal tipo di database che hai utilizzando un factory model.
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195

    Re: Re: DataAdapter e Fill(...)

    Originariamente inviato da riccardone
    Se ogni volta devi "castare" il datadapter nel tipo giusto se non sbaglio perdi l'indipendenza dal tipo di database che hai utilizzando un factory model.

    Mmmmhh... in realtà, usando la Reflection, ho visto la dimostrazione (fatta da un grande della programmazione) che si può mantenere l'indipendenza del database semplicemente passando come parametro della funzione più "alta", il nome dell'assembly relativo al db engine che vuoi usare...

    Però al momento non l'ho ancora messo in atto... :quipy:
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  8. #8

    Re: Re: Re: DataAdapter e Fill(...)

    Originariamente inviato da Gammino
    si può mantenere l'indipendenza del database semplicemente passando come parametro della funzione più "alta", il nome dell'assembly
    Confermo. In giro ci sono varie applicazioni di esempio che utilizzano questa tecnica. Se non ricordo male anche http://www.dotnetnuke.com/
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.