Newsgroup: it.comp.lang.visual-basic
Titolo: [vb.net] Blocco Try/Catch ed errore nella FillSchema

Ciao a tutti,
ho il seguente pezzo di codice
Try
   da = New OleDb.OleDbAdapter(...
   ds = New DataSet
   da.Fill(ds)
   da.FillSchema(ds, SchemaType.Source)   <---
   ...
Catch e as OleDb.OleDbException
   ...
End Try
Dove 
da e' un OleDb.OleDbDataAdapter
ds e' un DataSet
In una determinata situazione (un result set con righe uguali) ho
l'errore 
"An unhandled exception of type 'System.ArgumentException' occurred in
system.data.dll"
"Additional Information: These columns don't currently have unique
values"
Mi chiedo:
1) Cosa diavolo gli frega se ci sono righe uguali e come faccio a
fargliele digerire
2) Perche' comunque in debug l'errore mi blocca l'esecuzione al punto
segnato (con conseguente blocco programma) e non mi esegue il blocco
di codice nella sezione Catch ?
Ciao da un HappyMan che quando ha a che fare con .Net non e' sempre
cosi' happy...
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
despammed.com

 di codice nella sezione Catch ?
perche "catchi" solo le oledbexception
prova a mettere anche un catch ex as exception (dopo quelli specifici, of
course)
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

course)
Ottimo, mi sfuggiva la possibilita' di avere piu' catch di fila. 
Guardando la proprieta' StackTrace della exception penso di aver
capito anche l'origine del primo errore: in pratica nel tentativo di
caricare un result set con righe uguali vado a scontrarmi con qualche
constraint che si crea internamente il datatable, anche se il result
set in questione e' creato con una join (quindi come diavolo se li
crea questi indici interni ?)
Lo deduco perche' vedo nello StackTrace le collection
System.Data.ConstraintCollection e famiglia..
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it

 values"
Ave
giuseppeD

> values"
Mah la cosa curiosa e' che io quella proprieta' proprio non la tocco,
probabilmente di propria iniziativa .net immagina che i record non
possano essere duplicati.


 possano essere duplicati.
Infatti,
dalla guida:
di configurare le seguenti proprietà dell'oggetto DataColumn, se presenti
nell'origine dati:
Unique
Se non è presente la chiave univoca non viene rilevata.
Ho eseguito le seguenti due prove, e non ho ottenuto errore:
Dim sql As String = "SELECT * FROM [Order Details]"
            Dim dap As New OleDb.OleDbDataAdapter(sql, db)
            Dim ds As New DataSet
            dap.Fill(ds)
            dap.FillSchema(ds, SchemaType.Source)
Dim sql As String
            sql = "SELECT  Orders.*, [Order Details].* "
            sql &= "FROM   Orders INNER JOIN [Order Details] ON
Orders.OrderID = [Order Details].OrderID "
            Dim dap As New OleDb.OleDbDataAdapter(sql, db)
            Dim ds As New DataSet
            dap.Fill(ds)
            dap.FillSchema(ds, SchemaType.Source)
Forse l'errore è nella costruzione dell'istruzione sql ?
Ave
giuseppeD

Forse l'errore è nella costruzione dell'istruzione sql ?
No perche' nel query analyzer funziona (ed e' li' che ho verificato la
duplicazione dei record).
Per ora lascio il dubbio insoluto, anche perche' ho risolto il tutto
mettendo una distinct (dal punto di vista della logica della
applicazione i record duplicati erano un errore, ma comunque la query
_sintatticamente_ era giusta), quando avro' tempo vedro' di studiarci
sopra, anche perche' vorrei che la mia classe che ho realizzato per
l'accesso ai dati funzioni anche per i record duplicati (magari in un
altro progetto).
A prop. curiosita' personale, mi piacerebbe sapere chi fa gli
sviluppatori di .net lavorano direttamente con i dataset, dataadapter,
datatable, datapifferi etc e chi invece ha preferito incapsulare la
complessita' di quegli oggetti in classi piu' maneggevoli.
Io per esempio mi sono scritto una classe che traforma quell'insieme
di oggetti in un oggetto con gli stessi metodi del vecchio RDO (al
quale sono affezionatissimo), cioe' movenext, movefirst, edit update
etc etc, il codice che scrivo risulta moolto piu' ordinato e semplice
da gestire.
Ciao e grazie per l'attenzione fino a questo punto :-)
