Chiamate Duplicate al DB

venerdì 28 dicembre 2007 - 09.33

a.gusella Profilo | Newbie

Salve a tutti, ho cominciato da poco ad addentrarmi nel mondo aspx... e mi trovo davanti ad una piccola anomalia:
Sto sviluppando una semplice applicazione web utilizzando DreamWeaver in abbinamento a controlli che sviluppo su visual studio e... mettendomi a controllare le chiamate al DB (SqlServer 2000) ho constatato che le stored che utilizzo per popolare le pagine... vengono richiamate 2 volte, ho provato a mettermi in output sulle pagine i response.write di alcune variabili... ed anche questi vengono stampati due volte...

Non riesco proprio a capire, penso sia un problema di configurazione dell'applicazione... ma non saprei proprio dove mettere le mani!

Vi ringrazio dell'attenzione

Alberto

alx_81 Profilo | Guru

>Salve a tutti,
Ciao!

>ho cominciato da poco ad addentrarmi nel mondo
>aspx... e mi trovo davanti ad una piccola anomalia:
>Sto sviluppando una semplice applicazione web utilizzando DreamWeaver
>in abbinamento a controlli che sviluppo su visual studio e...
>mettendomi a controllare le chiamate al DB (SqlServer 2000) ho
>constatato che le stored che utilizzo per popolare le pagine...
>vengono richiamate 2 volte, ho provato a mettermi in output sulle
>pagine i response.write di alcune variabili... ed anche questi
>vengono stampati due volte...
>Non riesco proprio a capire, penso sia un problema di configurazione
>dell'applicazione... ma non saprei proprio dove mettere le mani!
Così non posso darti nessun aiuto, mi mancano alcune specifiche.. Che ne dici di postare le parti del codice dove effettui la chiamata? E magari l'evento che gestisci.. Come popoli la pagina, ecc..
insomma, sii più preciso affinchè possiamo aiutarti meglio..
>
>Vi ringrazio dell'attenzione
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

a.gusella Profilo | Newbie

Ciao, grazie per la risposta, cerco d'essere un po' più esaustivo, allora:

- IIS 6 su Win server 2003

- Nessun codeBehind, il codice (VB.NET) è gestito direttamente sulla pagina:
<script runat="server">
</script>

- Per farmi ritornare i dati dal DB, uso questa funzioncina:

Public Function getDataSet(ByVal sqlString As String, Optional ByVal myParamArray() As SqlParameter = Nothing, Optional ByVal myCommandType As System.Data.CommandType = CommandType.StoredProcedure) As DataSet
Dim nwindConn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Try
Dim selectCMD As SqlCommand = New SqlCommand(sqlString, nwindConn)
Dim custDA As SqlDataAdapter = New SqlDataAdapter
custDA.SelectCommand = selectCMD
myConn.Open()
Dim custDS As DataSet = New DataSet
If Not myParamArray Is Nothing Then
Dim i As Int16
For i = 0 To myParamArray.GetLength(0) - 1
selectCMD.Parameters.Add(myParamArray(i))
Next
End If
selectCMD.CommandType = myCommandType
custDA.Fill(custDS)
myConn.Close()
Return custDS
Catch ex As Exception
myConn.Close()
myConn = Nothing
return nothing
End Try
End Function

- La stored fa' solo una select * su una tabella e viene passata come stringa alla funzione, e come: CommandType = CommandType.Text

- Se all'interno del codice Page_Load (anche se faccio il controllo postBack!), metto un response.write( datasetRestituito.Tables(0).Rows(0).Item("NomeCampo"))... Me lo trovo copiato 2 volte all'interno della pagina!

- Controllando le chiamate al database con il tracert... trovo che le chiamate al DB sono duplicate... ma succede anche con gli oggetti di DreamWeaver (DreamweaverCtrls.dll)... tutto mi viene duplicato... ^o) e non capisco... Ti allego anche un pezzettino di codice che usa DW per creare il suo dataset, il codice è creato in automatico:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="iso-8859-1" %>
<%@ Register TagPrefix="MM" Namespace="DreamweaverCtrls" Assembly="DreamweaverCtrls,version=1.0.0.0,publicKeyToken=836f606ede05d46a,culture=neutral" %>
<MM:DataSet
id="dstTabella"
runat="Server"
IsStoredProcedure="false"
ConnectionString='<%# System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_STRING_MyDB") %>'
DatabaseType='<%# System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_DATABASETYPE_MyDB") %>'
CommandText='<%# "SELECT * FROM dbo.Tabella" %>'
Debug="true"
>

- Sicuramente sto sbagliando qualche impostazione... Perchè, metre il mio codice l'ho scritto io... quello di DreamWeaver (CS3) mi pare strano duplichi le chiamate... vuoi che nessuno se ne sia mai accorto?

Spero d'essere stato un po' più chiaro, ti ringrazio dell'aiuto!

Alberto





alx_81 Profilo | Guru

>- Per farmi ritornare i dati dal DB, uso questa funzioncina:
Dove la richiami?

><MM:DataSet
>id="dstTabella"
>runat="Server"
>IsStoredProcedure="false"
>ConnectionString='<%# System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_STRING_MyDB")
>%>'
>DatabaseType='<%# System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_DATABASETYPE_MyDB")
>%>'
>CommandText='<%# "SELECT * FROM dbo.Tabella" %>'
>Debug="true"
>>
Sembra che questo controllo sia indipendente dalla tua funzione..
Passami anche gli altri eventi, per capire come richiami la getdateset e come associ il source al controllo..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

a.gusella Profilo | Newbie

- >- Per farmi ritornare i dati dal DB, uso questa funzioncina:
- Dove la richiami?

Nell'evento onload, la uso per riempire un semplice repeater:

<...>
myRp.DataSource = dstReader
myRp.DataBind()
<...>

Questo è il codice, non mi sembra nulla di trascendentale:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dstReader As DataSet = New DataSet
'
dstReader = getDataSet("exec miastored", , CommandType.Text)
myRp.DataSource = dstReader
myRp.DataBind()
'
dstReader = nothing
End Sub

>Sembra che questo controllo sia indipendente dalla tua funzione..
>Passami anche gli altri eventi, per capire come richiami la getdateset e come associ il source al controllo..
>Alx81 =)

Ho fatto un altro paio di esempi con la mia funzione, se utilizzo codebehind, non ho nessun problema ovvero: le chiamate avvengono una sola volta.

Se puo' essere utile... quando utilizzo la dll di DreamWeaver ho notato 2 comportamenti differenti:
1) se apro il Dataset ma non metto nessun campo in output sulla pagina, la chiamata avviene una sola volta.
2) se porto un campo in output sulla pagina, la chiamata al DB viene duplicata.

In entrambi i casi appena citati, non uso il codebehind...

Questo mi fa' riflettere che il tutto non sia legato al DB od alle sue chiamate, ma allo "strano" effetto che se io
metto un response.write("passa") nell'onLoad della pagina, mi ritrovo scritto "passapassa"

Potrebbe essere che mi manca una fix? La versione del framework installata è la 1.1.4322.573, non posso passare alla 2 per problemi
legati ad altri applicativi installati sul server...

Ti ringrazio ancora dell'aiuto, e visto che è il 31... ti auguro ed auguro a tutti quelli che leggono questo thread un buon 2008

Alberto

alx_81 Profilo | Guru

>Questo è il codice, non mi sembra nulla di trascendentale:
>
>Private Sub Page_Load(ByVal sender As System.Object, ByVal e
>As System.EventArgs) Handles MyBase.Load
> Dim dstReader As DataSet = New DataSet
> '
>dstReader = getDataSet("exec miastored", , CommandType.Text)
> myRp.DataSource = dstReader
> myRp.DataBind()
> '
> dstReader = nothing
>End Sub
Intanto puoi evitare di fare un New DataSet, visto che poi lo sovrascrivi con la chiamata alla funzione, puoi fare direttamente:

Dim dstReader As DataSet = getDataSet("exec miastored", , CommandType.Text)

poi la set a nothing del dataset non serve più, il framework ti espone un metodo che "pulisce" la memoria, il Dispose().
dstReader.Dispose()

Ho visto che hai scritto nella stanza ASP.Net 1.1, ma ti do un consiglio anche per il 2.0 (ormai ti conviene passare a questa versione )
Using ds As New DataSet ' fai quello che devi fare End Using

con questo costrutto gestisci anche la pulizia automatica

>
>>Sembra che questo controllo sia indipendente dalla tua funzione..
>>Passami anche gli altri eventi, per capire come richiami la getdateset e come associ il source al controllo..
>>Alx81 =)
>
>Ho fatto un altro paio di esempi con la mia funzione, se utilizzo
>codebehind, non ho nessun problema ovvero: le chiamate avvengono
>una sola volta.
>
>Se puo' essere utile... quando utilizzo la dll di DreamWeaver
>ho notato 2 comportamenti differenti:
>1) se apro il Dataset ma non metto nessun campo in output sulla
>pagina, la chiamata avviene una sola volta.
>2) se porto un campo in output sulla pagina, la chiamata al DB
>viene duplicata.
>
>In entrambi i casi appena citati, non uso il codebehind...
>
>Questo mi fa' riflettere che il tutto non sia legato al DB od
>alle sue chiamate, ma allo "strano" effetto che se io
>metto un response.write("passa") nell'onLoad della pagina, mi
>ritrovo scritto "passapassa"
>Potrebbe essere che mi manca una fix? La versione del framework
>installata è la 1.1.4322.573, non posso passare alla 2 per problemi
>legati ad altri applicativi installati sul server...
La cosa strana è che sembra che esegua due volte la load della pagina. Prima avrei pensato ad un doppio binding, ad esempio un collegamento al tuo dataset e poi un bind ad un controllo scritto nell'aspx. Ma se mi dici che con una response.write nella Load lo vedi due volte, vuol dire che la pagina si ricarica due volte, per forza di cose. E se sposti tutto in codebehind invece non dà questo problema.. mmmmmh

Prova a postare anche tutto l'aspx.. provo a convertirlo con Visual Studio e vedo che succede.. purtroppo non conosco dreamweaver così bene
>
>Ti ringrazio ancora dell'aiuto, e visto che è il 31... ti auguro
>ed auguro a tutti quelli che leggono questo thread un buon 2008
Grazie ed Auguroni a te.. fino alle 16.00 sono a casa

Alx81 =)

http://blogs.dotnethell.it/suxstellino

a.gusella Profilo | Newbie

Anno nuovo... rogna vecchia :) ti ringrazio delle dritte, "using" è veramente comodo...

Tornando al mio problema, ho lasciato perdere il discorso "DB"... è sicuramente un problema di duplicazione dell'evento "Load"...

esempio:

Nella macchina "server" (net framework 1.x) il seguente codice

<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="utf-8"%>
<script runat="server">
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
response.write("passa")
End Sub
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
</body>
</html>

Mi da come out "passapassa"

Mentre in VS2005 in debug scrive correttamente "passa"

Mi sa' che è meglio se comincio a cercare qualche fix... che ne dici?

Ciao, grazie ancora

Alberto

alx_81 Profilo | Guru

>Anno nuovo... rogna vecchia :) ti ringrazio delle dritte, "using"
>è veramente comodo...
di nulla
>
>Tornando al mio problema, ho lasciato perdere il discorso "DB"...
>è sicuramente un problema di duplicazione dell'evento "Load"...
>
>esempio:
>
>Nella macchina "server" (net framework 1.x) il seguente codice
>
><%@ Page Language="VB" ContentType="text/html" ResponseEncoding="utf-8"%>
><script runat="server">
>Private Sub Page_Load(ByVal sender As System.Object, ByVal e
>As System.EventArgs) Handles MyBase.Load
> response.write("passa")
> End Sub
></script>
><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
><html xmlns="http://www.w3.org/1999/xhtml">
><head>
><meta http-equiv="Content-Type" content="text/html; charset=utf-8"
>/>
><title>test</title>
></head>
><body>
></body>
></html>
>
>Mi da come out "passapassa"
>
>Mentre in VS2005 in debug scrive correttamente "passa"
>
>Mi sa' che è meglio se comincio a cercare qualche fix... che
>ne dici?
Se così ti scatena due volte l'evento, e per di più se in Visual Studio non dà questo problema.. beh.. ti giuro che sono senza parole..
Ho provato a cercare qualcosa su internet.. ma proprio non capisco che comportamento sia. Il problema è che non conosco nessuno che usa dreamweaver e quindi non saprei nemmeno dirti come funziona "dietro le quinte"
>
>Ciao, grazie ancora
Mi spiace..
Se trovi qualcosa facci sapere

Alx81 =)

http://blogs.dotnethell.it/suxstellino

a.gusella Profilo | Newbie

Appena riesco a risolvere il problema, posto la soluzione e chiudo il thread.

Anch'io sto' googlando un pò per vedere se qualcun'altro ha avuto lo stesso problema ma per adesso non ho ancora trovato nulla, ho provato a fare il trace della pagina ma non mi dice assolutamente nulla o meglio... tutto sembra nella norma...

A risentirci, ciao grazie!

Alberto

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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5