Problemi gridview e sql

lunedì 03 marzo 2008 - 17.34

ReRosso Profilo | Junior Member

Ciao ragazzi ho un problema con un'applicaziione asp.net

Devo recuperare dati da un DB di SQL Server 2000, e utilizzo un gridview per la visualizzazione:

Il codice e' questo:

Protected Sub b1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
cmd = New SqlCommand("SELECT num_fat, dat_fatt, imp_fatt, imp_pag, num_man, dat_man FROM es_conto WHERE (p_iva_forn = 'yyyyy') AND (imp_pagare = '0') AND (num_fat = 'xxxxx')", cn)
cn.Open()
reader = cmd.ExecuteReader()
reader.Read()
If reader.HasRows = True Then
gv.DataSource = reader
gv.DataBind()
End If
reader.Close()
cn.Close()
End Sub

Il problema e' questo la query riportata nel codice non esegue il popolamento della gridview, nonostante se si esegue il debug, il reader contiene una riga. Ovviamente la stessa query eseguendola direttamente da SQL Server funziona recuperando (giustamente) una riga...

Quale puo' essere il problema ??? Grazie a tutti

luigidibiasi Profilo | Guru

Ciao,

se non sbaglio alla datagrid nella proprietà datasource devi passare un dataView oppure una datatable non direttamente il dataReader.


Luigi Di Biasi

ReRosso Profilo | Junior Member

Ciao...

Il controllo in questione e' un gridview non un datagrid....Comunque in altre situazioni ho gia' associato il controllo direttamente al reader senza problemi

alx_81 Profilo | Guru

>Ciao ragazzi
Ciao!

>Il problema e' questo la query riportata nel codice non esegue
>il popolamento della gridview, nonostante se si esegue il debug,
>il reader contiene una riga. Ovviamente la stessa query eseguendola
>direttamente da SQL Server funziona recuperando (giustamente)
>una riga...
>Quale puo' essere il problema ???
Se fai la read prima di associare il controllo al gridview, il puntatore al reader si sposta al record successivo, che corrisponde alla fine del reader.. E siccome il sqldatareader è forward only, perdi il record. Quando assegni il reader alla tua gridview, non fare operazioni di nessun tipo su di esso. Il metodo DataBind() si occuperà di leggere i dati dal tuo datareader. Assegna solamente la proprietà datasurce. Ti allego un esempio di codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ho utilizzato lo statemet Using, consigliato per gestire al meglio il rilascio delle risorse.

Inoltre, e scusa se mi permetto, ho notato che il tuo codice possiede una scarsa tipizzazione "forte". Sembra quasi che l'option strict del tuo Visual Studio per Visual Basic sia ad off. Cerca di evitarlo SEMPRE. Tipizza e vedrai che ti togli tanti problemi di gestione. Poi, logicamente, il tipo è fondamentale per una corretta programmazione. Ci sarebbe da dire tantissimo sulla scelta dell'option strict che hai fatto, ma ci sarebbe da scrivere tantissimo. Tienilo sempre a ON (anche da impostazioni di visual studio), mi raccomando.


@luigidibiasi
>se non sbaglio alla datagrid nella proprietà datasource devi passare un dataView oppure una datatable non direttamente il dataReader.
Attenzione, stiamo parlando di gridview. E attenzione 2 , puoi passare anche direttamente il datareader. Ad una proprietà DataSurce puoi passare qualunque oggetto che implementi le interfacce richieste per il binding.

> Grazie a tutti
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

ReRosso Profilo | Junior Member

Ciao Axl....

Effettivamente il problema era proprio quello di cui parlavi...quindi grazie mille.

Siccome mi sembri una persona disponibile...approfitto di te chiedendoti un altro consiglio!!!

La mia azienda utilizza un firewall HW con un IP statico.
Dovrebbe essere configurato per nattare le richieste http in ingresso all' indirizzo interno del server web.
Fino a qui niente di strano...adesso pero' arriva il bello....

Sul server web (Windows 2003 server standard edit.) che utilizza IIS 6.0, sono presenti due web application; una deve essere invisibile dall'esterno (viene utilizzata soltanto sulla LAN interna), la seconda invece deve essere disponibile per l'esterno.

- E' possibile configurare il server web in questa modalità???
- Cosa posso fare per mettere in sicurezza il server web da eventuali attachi dall'esterno (magari proprio attraverso l'applicazione), (tieni presente che una volta entrati nel server web, si ha praticamente accesso al resto della LAN) ?

Scusa per il "torrente" di domande...e grazie ancora.

alx_81 Profilo | Guru

>Ciao Axl....
Ciao
>
>Effettivamente il problema era proprio quello di cui parlavi...quindi
>grazie mille.

>- E' possibile configurare il server web in questa modalità???
purtroppo non posso aiutarti poichè non ho grosse esperienze in materia.

>Scusa per il "torrente" di domande...e grazie ancora.
Nessun problema! Anzi, mi dispiace non poterti rispondere.
Ti consiglio di postare il messaggio in una stanza più adeguata (http://www.dotnethell.it/forum/Windows-Server-2003-IIS.aspx).

PS: Se ritieni che la risposta ti abbia risolto il problema, accettala che chiudiamo il thread, grazie!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5