Ciao a tutti,
ho sviluppatto un piccolo crm che genere delle offrte in asp.net utlizzando vs2010
Ho il seguente problema, quando l'utente seleziona un articolo da una dropdownlist in alcune text compaiono i dati dell'articolo scelto, nome, prezzo di listino, prezzo unitario, l'utente può inserire uno sconto o maggiorazione in una text e quando perde lo stato attivo richiamo una routine che mi controlla tramite 3 banalissime query sul db se lo sconto o maggiorazione è permesso oppure no.
Questo controllo in locale è istantaneo (nemmeno 1 secondo), mentre quando carico il sito online risulta molto lento, a volte impiega anche ben 8 secondi!
Ho pubblicato l'applicazione su un server di aruba, ho chiesto a loro supporto e questo è quello emerso:
-gli ho fatto fare le mie stesse identiche prove e per loro il postback risulta istantaneo e senza dover aspettare 8 secondi (loro mi hanno assicurato che hanno fatto il test con una rete esterna da dove è ospitato il server utilizzando un ADSL da 8 mb)
-io ho fatto le prove sia dal mio cliente che nel mio ufficio, entrambi abbiamo una adsl da 10mb e il postback risulta molto lento
-per scrupolo ho fatto la prova a casa di un mio amico che abita nel paese a fianco al mio e che per fortuna sua ha già la fibra ottica e il postback risulta immediato.
-ho fatto una prova collegando il mio pc alla rete del mio cellulare che è oltre i 20 mb e il postback risulta veloce!
Non so più in che modo risolvere questo problema, ho escluso un problema di antivirus perchè le prove che ho fatto ho sempre usato lo stesso portatile con lo stesso antivirus, l'unica cosa che cambiava era l'ADSL!!!!
E' possibile che se uno non ha una fibra ottica il post back sia così tanto lento? ripeto ben 8 secondi!!!
Qualcuno ha delle idee da suggerirmi??
Di seguito vi posto il codice della pagina, la funzione OnSelectedIndexChanged2 è quella che controlla che il prezzo non sia stato scontato o maggiorato troppo.
Ho provato anche a eseguire la routine cancellando le 3 query per vedere se fosse un problema di collegamento a sql server, ma il risultato non cambia...
Accetto qualsiasi consiglio, sto diventando pazzo!!!
Grazie
Ciao
codice:
Protected Sub OnTextChanged2(ByVal sender As Object, ByVal e As EventArgs)
Dim txt As TextBox = DirectCast(sender, TextBox)
Dim ID As String = ""
lbl_error.Text = ""
Dim C As Integer
Dim sTmp As String = ""
For C = 0 To Len(txt.ID)
If IsNumeric(Mid(txt.ID, C + 1, 1)) Then
sTmp = sTmp & Mid(txt.ID, C + 1, 1)
End If
Next
ID = sTmp
Dim txt1 As TextBox = Master.FindControl("MainContent").FindControl("listino" & ID)
Dim txt2 As TextBox = Master.FindControl("MainContent").FindControl("sconto" & ID)
Dim txt3 As TextBox = Master.FindControl("MainContent").FindControl("maggiorazione" & ID)
Dim txt4 As TextBox = Master.FindControl("MainContent").FindControl("netto_unt" & ID)
Dim txt5 As TextBox = Master.FindControl("MainContent").FindControl("riepilogativo_unt" & ID)
Dim listino As Double
Dim maggiorazione As Double
Dim sconto As Double
If IsNumeric(txt1.Text) Then
listino = txt1.Text
Else
listino = 0
End If
If IsNumeric(txt2.Text) Then
sconto = txt2.Text
Else
sconto = 0
End If
If IsNumeric(txt3.Text) Then
maggiorazione = txt3.Text
Else
maggiorazione = 0
End If
txt4.Text = listino - (((listino) / 100) * sconto) + (((listino) / 100) * maggiorazione)
txt5.Text = listino - (((listino) / 100) * sconto) + (((listino) / 100) * maggiorazione)
Dim ddl_ctl As DropDownList = Master.FindControl("MainContent").FindControl("ddl_articolo" & ID)
Dim riepilogativo_unt_ctl As TextBox = txt5
Dim combo_ctl As DropDownList = Master.FindControl("MainContent").FindControl("ddl_articolo" & ID)
If ddl_ctl.SelectedValue = "" Then
lbl_error.Visible = "True"
lbl_error.Text = "Devi selezionare l'articolo"
Exit Sub
End If
If riepilogativo_unt_ctl.Text = "" Then
Exit Sub
End If
'CONTROLLO IL PREZZO RIEP UNT SIA MAGGIORE UGUALE AL LISTINO
Dim listino_ctl As String = ""
Select Case ddl_Listino.SelectedValue
Case "PR"
listino_ctl = "PR"
Case "1"
listino_ctl = "2"
Case "2"
listino_ctl = "2"
Case "11"
listino_ctl = "12"
Case "12"
listino_ctl = "12"
Case "21"
listino_ctl = "22"
Case "22"
listino_ctl = "22"
Case "31"
listino_ctl = "32"
Case "32"
listino_ctl = "32"
Case "36"
listino_ctl = "37"
Case "37"
listino_ctl = "37"
Case "41"
listino_ctl = "42"
Case "42"
listino_ctl = "42"
End Select
Dim SQL As String
Dim Sqlconn As New SqlConnection(ConfigurationManager.ConnectionStrings("dbConnectionString_usa").ToString)
Try
Sqlconn.Open()
If europa.Value = "1" Then
SQL = "Select Price FROM MA_ItemsPriceLists WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='" & listino_ctl & "'"
Else
SQL = "Select Price FROM MA_ItemsPriceLists_usa WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='" & listino_ctl & "'"
End If
Dim ctl_listino As Boolean = True
Dim cmd As New SqlCommand
cmd.Connection = Sqlconn
cmd.CommandText = SQL
Dim dr As SqlDataReader = (cmd.ExecuteReader)
If dr.HasRows Then
'si sposta ciclicamente attraverso i record e visualizza i valori.
Do While dr.Read
If riepilogativo_unt_ctl.Text < dr("Price") Then
lbl_error.Visible = "True"
lbl_error.Text = "Riepilogativo unt. più basso del Listino associato"
Exit Sub
End If
ctl_listino = True
Loop
End If
dr.Close()
cmd.Dispose()
If ctl_listino = False Then
If europa.Value = "1" Then
SQL = "Select Price FROM MA_ItemsPriceLists WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
Else
SQL = "Select Price FROM MA_ItemsPriceLists_usa WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
End If
cmd = New SqlCommand
cmd.Connection = Sqlconn
cmd.CommandText = SQL
dr = cmd.ExecuteReader
If dr.HasRows Then
'si sposta ciclicamente attraverso i record e visualizza i valori.
Do While dr.Read
If riepilogativo_unt_ctl.Text < dr("Price") Then
lbl_error.Visible = "True"
lbl_error.Text = "Riepilogativo unt. più basso del Listino associato"
Exit Sub
End If
Loop
End If
dr.Close()
cmd.Dispose()
End If
'CONTROLLO CHE IL PREZZO NON SIA SUPERIORE AL LISTINO PR
If europa.Value = "1" Then
SQL = "Select Price FROM MA_ItemsPriceLists WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
Else
SQL = "Select Price FROM MA_ItemsPriceLists_usa WHERE Item='" & combo_ctl.SelectedValue & "' and PriceList='21'"
End If
cmd = New SqlCommand
cmd.Connection = Sqlconn
cmd.CommandText = SQL
dr = cmd.ExecuteReader
If dr.HasRows Then
'si sposta ciclicamente attraverso i record e visualizza i valori.
Do While dr.Read
If riepilogativo_unt_ctl.Text > dr("Price") Then
lbl_error.Visible = "True"
lbl_error.Text = "Riepilogativo unt. più alto del Listino PR"
Exit Sub
End If
Loop
End If
dr.Close()
cmd.Dispose()
Catch ex As Exception
FailureText.Text = ex.Message
Exit Sub
Finally
Sqlconn.Close() 'chiude la connessione
Sqlconn.Dispose() 'rilascia le risorse
SqlConnection.ClearPool(Sqlconn) ' pulisce il pool delle connessione associate all'oggetto connection
End Try
End Sub