3 messaggi dal 01 settembre 2011
Da programmatore ASP Classic di più che decennale esperienza, faccio sinceramente fatica ad apprezzare sempre ASP.NET. E' vero che in molti casi la programmazione visuale è più agile e perfino divertente e ti consente di non scrivere neanche una riga di codice, ma talvolta ASP.NET ha complicato in maniera incredibile e paradossale procedure che con Classic ASP erano semplicissime.
Un esempio lampante di quanto dico è la routine che ti restituisce il numero di record dopo una query del tipo "SELECT * FROM Pazienti WHERE [...]". Con Classic ASP bastava eseguire la query dopo la connessione al database e visualizzare il RecordCount. Con ASP.NET, una volta impostato un oggetto SqlDataSource e collegata ad esso una GridView (che deve apparire solo in caso che i record siano in numero superiore a 0) sto provando da giorni decine di routine di esempio, lunghe e macchinose e nessuna di queste funziona. Me ne potete suggerire una che non sia il prodotto di una mente disturbata e che richiede una scrittura interminabile di variabili, metodi, classi e quant'altro? Grazie e Saluti
294 messaggi dal 14 novembre 2001
Io faccio cosi':

Sub Page_Load(ByVal obj As Object, ByVal e As EventArgs)

Dim Conn As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings(xxxxx)

Conn.Open()
Dim SQL AS String = _
"SELECT COUNT(ID_Tabella) AS Conteggio FROM NomeTabella WHERE...."

Dim objCmd As New SqlCommand(SQL, Conn)
Dim objReader As SqlDataReader
objReader = objCmd.ExecuteReader
objReader.Read

Response.Write(objReader("Conteggio"))

Conn.Close

End Sub

Campo Testaccio, c'hai tanta gloria...
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, benvenuto nel forum! (e ad asp.net!)

sergio65 ha scritto:
faccio sinceramente fatica ad apprezzare sempre ASP.NET.

hehehe, all'inizio fa questo effetto perché il framework .NET è molto vasto e solo ad un certo punto (presto), quando acquisisci una visione d'insieme puoi apprezzarne le caratteristiche.
Il modo migliore per imparare è quello di seguire un libro perché altrimenti rischi di spendere inutilmente del tempo cercando di trasporre pari pari le ampie conoscenze che sicuramente hai di asp classico. E' un'altra cosa, bisogna ripartire dall'inizio, in un certo senso.

Comunque, venendo al sodo.
Visualizzare dei dati con SqlDataSource e GridView è semplice e richiede poco codice:
<asp:SqlDataSource ID="source"
        ConnectionString="tuaConnString"
        SelectCommand="SELECT * FROM Pazienti" runat="server" />
<asp:GridView ID="griglia" DataSourceID="source" runat="server">
</asp:GridView>
Nel caso in cui il SelectCommand non producesse risultati, la griglia non apparirebbe. Spiega esattamente cosa ti sta dando problemi.

sergio65 ha scritto:
sto provando da giorni decine di routine di esempio, lunghe e macchinose e nessuna di queste funziona
Comunque, se il SqlDataSource non dovesse rispondere alle tue esigenze, puoi provare qualcos'altro. Ecco un sistema breve e che funziona.

Dim connectionString As String = "qui metti la tua connection string"
Dim comandoSql As String = "SELECT * FROM Pazienti" 
'Sfrutto un DataAdapter per aprire una connessione al db e fargli recuperare i record della SELECT
Using adapter As New System.Data.SqlClient.SqlDataAdapter(comandoSql, connectionString)
'ora uso una DataTable come contenitore dei risultati ottenuti dal DataAdapter
  Using dataTable As New System.Data.DataTable()
    'riempio il DataTable con le righe (record) trovate
    adapter.Fill(dataTable)
    'se le righe ottenute sono più di zero...
    If (dataTable.Rows.Count > 0) Then
      'uso il DataTable come sorgente di dati per una griglia
      griglia.DataSource = dataTable
      griglia.DataBind()
     End If
  End Using
End Using

Qui la tecnologia usata per l'accesso ai dati è ADO.Net. E' più simile al metodo che utilizzavi in Asp classico rispetto al databinding dichiarativo del SqlDataSource. Qui hai visto all'opera un DataAdapter e un DataTable, ma sono solo due delle classi che potresti impiegare per ottenere il medesimo risultato.
Visita questa pagina, ci sono tanti articoli da leggere, è un ottimo punto di inizio.
http://www.aspitalia.com/focuson/603/Speciale-ADO.NET-Accesso-Dati-.NET-Framework.aspx

ciao
Modificato da BrightSoul il 06 febbraio 2012 14.14 -

Enjoy learning and just keep making
11.886 messaggi dal 09 febbraio 2002
Contributi
maurodii ha scritto:

Dim objCmd As New SqlCommand(SQL, Conn)
Dim objReader As SqlDataReader
objReader = objCmd.ExecuteReader
objReader.Read
Response.Write(objReader("Conteggio"))
In questo caso particolare, quando hai una SELECT che restituisce una sola riga con una sola colonna, è più veloce usare il metodo .ExecuteScalar del SqlCommand.
Dim objCmd As New SqlCommand(SQL, Conn)
Response.Write(objCmd.ExecuteScalar().ToString())
Così devi scrivere meno codice e puoi fare a meno di istanziare un SqlDataReader. Ricorda che le classi coinvolte implementano tutte IDisposable, sarebbe indicato invocare il loro metodo .Dispose, oppure inserirle in un blocco Using, così il .Dispose verrà automaticamente invocato anche se si dovesse verificare un'eccezione.
ciao
Modificato da BrightSoul il 02 febbraio 2012 23.07 -

Enjoy learning and just keep making
294 messaggi dal 14 novembre 2001
BrightSoul ha scritto:
Dim objCmd As New SqlCommand(SQL, Conn)
Response.Write(objCmd.ExecuteScalar().ToString())


Grazie del consiglio lo provero' sicuramente ;)
Modificato da maurodii il 02 febbraio 2012 23.25 -

Campo Testaccio, c'hai tanta gloria...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.