Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-12-2010, 16:37   #1
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
[VB.NET 2010] Delucidazioni su possibili azioni con ExecuteScalar()

Ciao a tutti rieccomi a rompere

Ora sto ultimando la mia prima desktop-app. basata interamente sui miei Studi autonomi.. sono quasi alla fine e non voglio fermarmi proprio ora
il mio problema sta in questa private sub che QUALCUNO mi ha aiutato a finire con tanta pazienza
la subroutine funziona perfettamente ma ora vorrei aggiungere l'ultimo tassello (che spiego sotto il codice).
Codice:
 Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        'Prendo i dati da smsservergateway e li confronto con smspanel
        Dim Comando_SmsGateway As New OleDbCommand
        Dim Comando_SmsPanel As New OleDbCommand
        Dim Adapter_SmsGateway As New OleDbDataAdapter
        Dim Adapter_SmsPanel As New OleDbDataAdapter
        Dim Reader_SmsGateway As OleDbDataReader
        Dim ANUMBER As String
        Dim SMSMESSAGE As String
        Dim RECEIVEDDATE As Date
        Dim DEVICECODE As String
        Dim INBOXID As String
        Dim EMAIL As String
        Dim TESTO As String
        Dim Avanti As Integer

        Comando_SmsGateway.Connection = Connessione_server
        Comando_SmsGateway.CommandText = "SELECT * FROM INBOX"
        Comando_SmsGateway.CommandType = CommandType.Text
        Adapter_SmsGateway.SelectCommand = Comando_SmsGateway
        Connessione_server.Open()
        Reader_SmsGateway = Comando_SmsGateway.ExecuteReader()

        While Reader_SmsGateway.Read()
            Avanti = Avanti + 1
            INBOXID = Reader_SmsGateway("INBOXID")
            ANUMBER = Reader_SmsGateway("ANUMBER")
            DEVICECODE = Reader_SmsGateway("DEVICECODE")
            SMSMESSAGE = Reader_SmsGateway("SMSMESSAGE")
            RECEIVEDDATE = Reader_SmsGateway("RECEIVEDDATE")
            TESTO = "Spedito da : " & ANUMBER & Chr(13) & " Ricevuto il : " & RECEIVEDDATE & Chr(13) & " Testo del messaggio : " & SMSMESSAGE
            Comando_SmsPanel.Connection = Connessione
            Comando_SmsPanel.CommandText = "SELECT email FROM numeri INNER JOIN email ON email.id_email = numeri.idemail WHERE numero = @DEVICECODE"
            'Per impostare un parametro in una clausola WHERE con SELECT bisogna Esplicitare il tipo ! e poi assegnarli il valore.
            Comando_SmsPanel.Parameters.Add("@DEVICECODE", OleDbType.VarChar)
            Comando_SmsPanel.Parameters("@DEVICECODE").Value = DEVICECODE
            Comando_SmsPanel.CommandType = CommandType.Text
            Connessione.Open()
            'Per assegnare ad una variabile il risultato di una query con SELECT singola bisogna usare ExecuteScalar() , il tipo varia in base alle necessità
            EMAIL = Comando_SmsPanel.ExecuteScalar()
            Connessione.Close()
            ReportTesto = "   Sms ricevuto da : " & ANUMBER & "  Testo del messaggio : " & SMSMESSAGE & "  E-Mail spedita a : " & EMAIL
            BackgroundWorker1.ReportProgress(Avanti, ReportTesto)
            InviaEmail(EMAIL, TESTO)
            System.Threading.Thread.Sleep(Tempo)
            If BackgroundWorker1.CancellationPending Then
                e.Cancel = True
                Exit While
            End If
        End While
be il mio intento è di creare un controllo dopo il comando
Codice:
EMAIL = Comando_SmsPanel.ExecuteScalar()
cioè capire se ha trovato un risultato nella query
Codice:
 Comando_SmsPanel.CommandText = "SELECT email FROM numeri INNER JOIN email ON email.id_email = numeri.idemail WHERE numero = @DEVICECODE"
Se trova tale corrispondenza invia la mail (come gia fa) però se non trova la corrispondenza non fa nulla e ciò non mi piace affatto .. vorrei poter gestire questo evento , come posso fare?

mentre vi scrivo sto spulciando MSDN ma non sembra avere la risposta
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2010, 16:48   #2
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Per ora ho risolto cosi

Codice:
 EMAIL = Comando_SmsPanel.ExecuteScalar()
            If String.IsNullOrEmpty(EMAIL) Then
                ReportTesto = "   Questo messaggio : " & SMSMESSAGE & " Ricevuto da : " & ANUMBER & " Con Device Code : " & DEVICECODE & " E' in attesa di conferma"
            Else
                ReportTesto = "   Sms ricevuto da : " & ANUMBER & "  Testo del messaggio : " & SMSMESSAGE & "  E-Mail spedita a : " & EMAIL
                InviaEmail(EMAIL, TESTO)
            End If
E' la soluzione migliore? ce ne sono altre piu sicure?
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2010, 18:38   #3
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Sì, così può andare, Ludo.
Complimenti per il .IsNullOrEmpty !
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 19:49   #4
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Sì, così può andare, Ludo.
Complimenti per il .IsNullOrEmpty !
Ciao marco

grazie per il consiglio alla fine ho adottato quel if
Avrei ancora dei dubbi sempre su executescalar()

posso far in modo di capire se la query mi ritorna piu di un record ? cioè ora mi ritorna UNA EMAIL per ogni ciclo executescalar , ma se me ne tornassero due ? come faccio a capire se ci sono piu di un record? ovviamente se me ne tornano due andrei a fare altri controlli

cioè in sostanza il codice
Codice:
 Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        'Prendo i dati da smsservergateway e li confronto con smspanel

        Dim Comando_SmsGateway As New OleDbCommand
        Dim Comando_SmsPanel As New OleDbCommand
        Dim Comando_SmsPanel_Inserimento As New OleDbCommand
        Dim Adapter_SmsGateway As New OleDbDataAdapter
        Dim Adapter_SmsPanel As New OleDbDataAdapter
        Dim Reader_SmsGateway As OleDbDataReader
        Dim ANUMBER As String
        Dim SMSMESSAGE As String
        Dim RECEIVEDDATE As Date
        Dim DEVICECODE As String
        Dim INBOXID As String
        Dim EMAIL As String
        Dim TESTO As String
        Dim Avanti As Integer

        Comando_SmsGateway.Connection = Connessione_server
        Comando_SmsGateway.CommandText = "SELECT * FROM INBOX"
        Comando_SmsGateway.CommandType = CommandType.Text
        Adapter_SmsGateway.SelectCommand = Comando_SmsGateway
        Connessione_server.Open()
        Reader_SmsGateway = Comando_SmsGateway.ExecuteReader()

        While Reader_SmsGateway.Read()
            Avanti = Avanti + 1
            INBOXID = Reader_SmsGateway("INBOXID")
            ANUMBER = Reader_SmsGateway("ANUMBER")
            DEVICECODE = Reader_SmsGateway("DEVICECODE")
            SMSMESSAGE = Reader_SmsGateway("SMSMESSAGE")
            RECEIVEDDATE = Reader_SmsGateway("RECEIVEDDATE")
            TESTO = "Spedito da : " & ANUMBER & Chr(13) & " Ricevuto il : " & RECEIVEDDATE & Chr(13) & " Testo del messaggio : " & SMSMESSAGE
            Comando_SmsPanel.Connection = Connessione
            Comando_SmsPanel.CommandText = "SELECT email FROM numeri INNER JOIN email ON email.id_email = numeri.idemail WHERE numero = @DEVICECODE"
            'Per impostare un parametro in una clausola WHERE con SELECT bisogna Esplicitare il tipo ! e poi assegnarli il valore.
            Comando_SmsPanel.Parameters.Add("@DEVICECODE", OleDbType.VarChar)
            Comando_SmsPanel.Parameters("@DEVICECODE").Value = DEVICECODE
            Comando_SmsPanel.CommandType = CommandType.Text
            Connessione.Open()
            'Per assegnare ad una variabile il risultato di una query con SELECT singola bisogna usare ExecuteScalar() , il tipo varia in base alle necessità
            EMAIL = Comando_SmsPanel.ExecuteScalar()
            Connessione.Close()
            If String.IsNullOrEmpty(EMAIL) Then
                ReportTesto = "   Questo messaggio : " & SMSMESSAGE & " Ricevuto da : " & ANUMBER & " Con Device Code : " & DEVICECODE & " E' in attesa di conferma"
                Comando_SmsPanel_Inserimento.Connection = Connessione
                Comando_SmsPanel_Inserimento.CommandText = "INSERT INTO deposito (messaggio,da_numero,device_numero,data_ricezione) VALUES (@SMSMESSAGE,@ANUMBER,@DEVICECODE,@RECEIVEDDATE)"
                Comando_SmsPanel_Inserimento.Parameters.AddWithValue("@SMSMESSAGE", SMSMESSAGE)
                Comando_SmsPanel_Inserimento.Parameters.AddWithValue("@ANUMBER", ANUMBER)
                Comando_SmsPanel_Inserimento.Parameters.AddWithValue("@DEVICECODE", DEVICECODE)
                Comando_SmsPanel_Inserimento.Parameters.AddWithValue("@RECEIVEDDATE", RECEIVEDDATE)
                Comando_SmsPanel_Inserimento.CommandType = CommandType.Text
                Connessione.Open()
                Try
                    Comando_SmsPanel_Inserimento.ExecuteNonQuery()
                Catch Eccezione As OleDb.OleDbException
                    ReportTesto = "   " & Eccezione.Message
                End Try
                Connessione.Close()
            Else
                ReportTesto = "   Sms ricevuto da : " & ANUMBER & "  Testo del messaggio : " & SMSMESSAGE & "  E-Mail spedita a : " & EMAIL
                'InviaEmail(EMAIL, TESTO)
            End If
            BackgroundWorker1.ReportProgress(Avanti, ReportTesto)
            System.Threading.Thread.Sleep(Tempo)
            If BackgroundWorker1.CancellationPending Then
                e.Cancel = True
                Exit While
            End If
        End While
        Connessione_server.Close()
    End Sub
nell pezzo in cui cerco la MAIL

Codice:
 Comando_SmsPanel.Connection = Connessione
            Comando_SmsPanel.CommandText = "SELECT email FROM numeri INNER JOIN email ON email.id_email = numeri.idemail WHERE numero = @DEVICECODE"
            'Per impostare un parametro in una clausola WHERE con SELECT bisogna Esplicitare il tipo ! e poi assegnarli il valore.
            Comando_SmsPanel.Parameters.Add("@DEVICECODE", OleDbType.VarChar)
            Comando_SmsPanel.Parameters("@DEVICECODE").Value = DEVICECODE
            Comando_SmsPanel.CommandType = CommandType.Text
            Connessione.Open()
            'Per assegnare ad una variabile il risultato di una query con SELECT singola bisogna usare ExecuteScalar() , il tipo varia in base alle necessità
            EMAIL = Comando_SmsPanel.ExecuteScalar()
            Connessione.Close()
per come è scritto ora mi restituisce sempre un risultato
ma se nel caso ci fossero piu risultati ? (ovvero "WHERE numero = @DEVICECODE" se c'è WHERE numero = 0331000000 e tale associazione mi produce un risultato con [email protected] e [email protected] perciò piu di una mail e non solo una )

posso (tramite l'if o qualche controllo di flusso) capire se il record del risultato della query non è = 1 ?

Ultima modifica di Ludo237 : 15-12-2010 alle 19:52.
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 20:06   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
per come è scritto ora mi restituisce sempre un risultato
ma se nel caso ci fossero piu risultati ? (ovvero "WHERE numero = @DEVICECODE" se c'è WHERE numero = 0331000000 e tale associazione mi produce un risultato con [email protected] e [email protected] perciò piu di una mail e non solo una )

posso (tramite l'if o qualche controllo di flusso) capire se il record del risultato della query non è = 1 ?
No. ExecuteScalar deve sempre restituire un solo campo. Un solo valore.
Se è previsto un set di risultati devi usare un DataReader, o un DataTable, o un DataSet...
Perciò in una situazione del tutto generica : 0, 1, 1+ risultati, ExecuteScalar non va usato.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2010, 23:56   #6
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
No. ExecuteScalar deve sempre restituire un solo campo. Un solo valore.
Se è previsto un set di risultati devi usare un DataReader, o un DataTable, o un DataSet...
Perciò in una situazione del tutto generica : 0, 1, 1+ risultati, ExecuteScalar non va usato.
aaaaaaaaaa molto male escludendo a priori il datareader (perchè è gia dentro un ciclo di read() e non so come farlo ... ) provero a implementare il dataset
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 00:06   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
aaaaaaaaaa molto male escludendo a priori il datareader (perchè è gia dentro un ciclo di read() e non so come farlo ... ) provero a implementare il dataset
Quelle che ti sto dando sono indicazioni di massima.
Non sono entrato nel merito del tuo codice ( e non intendo certo farlo a mezzanotte... ).
Mi sembra tu ti stia un po' complicando le cose, comunque.
Se non sei troppo ferrato sull'Sql avanzato esistono altri sistemi per snellire, e non doversi ritrovare a fare DataReader nidificati o DataSet che forse contengono al massimo un paio di campi...
Potresti ad esempio fare solo la query più esterna e caricare i risultati in una List() di oggetti o di Structures, ecc...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 15:20   #8
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Quelle che ti sto dando sono indicazioni di massima.
Non sono entrato nel merito del tuo codice ( e non intendo certo farlo a mezzanotte... ).
Mi sembra tu ti stia un po' complicando le cose, comunque.
Se non sei troppo ferrato sull'Sql avanzato esistono altri sistemi per snellire, e non doversi ritrovare a fare DataReader nidificati o DataSet che forse contengono al massimo un paio di campi...
Potresti ad esempio fare solo la query più esterna e caricare i risultati in una List() di oggetti o di Structures, ecc...
utilizzare le list? cioè caricare i dati (1 o piu ) in una list e poterla controllare , cosi se la list ha un solo dato fa una cosa
se ne ha di piu ne fa un altra

si puo fare???


aiuto , pensavo che vb.net fosse facile

Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Quelle che ti sto dando sono indicazioni di massima.
Non sono entrato nel merito del tuo codice ( e non intendo certo farlo a mezzanotte... ).
Mi sembra tu ti stia un po' complicando le cose, comunque.
lo so marco il mio codice fa schifo ma è il mio primo progetto

Ultima modifica di Ludo237 : 16-12-2010 alle 15:22.
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 15:54   #9
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
utilizzare le list? cioè caricare i dati (1 o piu ) in una list e poterla controllare , cosi se la list ha un solo dato fa una cosa
se ne ha di piu ne fa un altra

si puo fare???
Certo. Tutto si può fare. In fondo cos'è un record restituito da una query ?
E' un insieme di campi correlati.
Non a caso su molti testi come vengono definiti i membri interni di una Classe ? Campi.
Se le classi sono troppo "complicate", per le cose semplici, VB ci viene incontro con le Structures :

Codice:
    Private Structure Persona
        Dim cognome As String
        Dim nome As String
        '...
        '...
    End Structure
E poi :
Codice:
        Dim P As New Persona
        P.nome = "ilnome"
        P.cognome = "ilcognome"
        '...
        '...
Estraendo dati da un DB, e volendo usare Structures, Classi, Liste ecc. le possibilità sono infinite. Bisogna solo trovare il miglior compromesso per le proprie esigenze.

Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
aiuto , pensavo che vb.net fosse facile
Non sei il solo. Ce ne sono a migliaia che si buttano a testa bassa a scrivere codice perchè qualcuno gli ha detto "usa VB.NET che è facile",
e poi immancabilmente .
Forse hai corso solo un po' troppo.
Se il tuo codice ti fa schifo è già un fatto positivo.
Fatti un'analisi chiara del problema, butta tutto e ricomincia.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 16:03   #10
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Certo. Tutto si può fare. In fondo cos'è un record restituito da una query ?
E' un insieme di campi correlati.
Non a caso su molti testi come vengono definiti i membri interni di una Classe ? Campi.
Se le classi sono troppo "complicate", per le cose semplici, VB ci viene incontro con le Structures :

Codice:
    Private Structure Persona
        Dim cognome As String
        Dim nome As String
        '...
        '...
    End Structure
E poi :
Codice:
        Dim P As New Persona
        P.nome = "ilnome"
        P.cognome = "ilcognome"
        '...
        '...
Estraendo dati da un DB, e volendo usare Structures, Classi, Liste ecc. le possibilità sono infinite. Bisogna solo trovare il miglior compromesso per le proprie esigenze.



Non sei il solo. Ce ne sono a migliaia che si buttano a testa bassa a scrivere codice perchè qualcuno gli ha detto "usa VB.NET che è facile",
e poi immancabilmente .
Forse hai corso solo un po' troppo.
Se il tuo codice ti fa schifo è già un fatto positivo.
Fatti un'analisi chiara del problema, butta tutto e ricomincia.
ma non posso "buttare tutto" ormai sono ad un passo dalla fine ! al massimo finisco questo e poi lo rifaccio.

non è che mi sono buttato a capofitto in vb.net è che io provengo dal web (php , mysql e jquery ) e volevo "tuffarmi" nel mondo desktop e tra i vari linguaggi (Delphi , C++ , c# , Java eccecc ) vb.net mi han detto che era (o è ) il piu user-friendly tra tutti.

Comunque opterei per Structure, anche perchè non conoscendo la differenza nn vedo neanche i vantaggi/svantaggi
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 16:12   #11
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
non è che mi sono buttato a capofitto in vb.net è che io provengo dal web (php , mysql e jquery ) e volevo "tuffarmi" nel mondo desktop e tra i vari linguaggi (Delphi , C++ , c# , Java eccecc ) vb.net mi han detto che era (o è ) il piu user-friendly tra tutti.
Beh, è abbastanza strano che ti abbiano consigliato VB, conoscendo i tuoi trascorsi. Forse la sintassi di un C# sarebbe stata più adatta. In ogni caso, sintassi a parte, .NET è sempre .NET.
Se hai già sviluppato in Object-Oriented-PHP non sei certo a zero.

Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
Comunque opterei per Structure, anche perchè non conoscendo la differenza nn vedo neanche i vantaggi/svantaggi
La differenza tra Classi e Structures è notevole.
Inizia dalle Structures.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 16:16   #12
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Beh, è abbastanza strano che ti abbiano consigliato VB, conoscendo i tuoi trascorsi. Forse la sintassi di un C# sarebbe stata più adatta. In ogni caso, sintassi a parte, .NET è sempre .NET.
Se hai già sviluppato in Object-Oriented-PHP non sei certo a zero.



La differenza tra Classi e Structures è notevole.
Inizia dalle Structures.

sisi sono PHP oop al 100% (se vuoi ti farò vedere alcune mega-classi in php .. modestia a parte mi ritengo molto ferrato sul php dopo 5 anni che ci smanetto dietro )

stavo pensando

visto che devo finirlo in qualche modo questo primo-progetto-schifoso ecco la mia idea :

questa è la parte incriminata
Codice:
 EMAIL = Comando_SmsPanel.ExecuteScalar()
se io trasformassi la variabile email (dichiarata : dim email as string) in un array ? e strasformo executescalar in un qualcosa (cosa??? ) che mi restituisca uno o piu risultati? in tal modo andrei a fare un rapido controllo sull array EMAIL , se esso contiene 1 oggetto faccio una cosa se ne contiene di piu un altra , puo funzionare ?
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 16:16   #13
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Beh, è abbastanza strano che ti abbiano consigliato VB, conoscendo i tuoi trascorsi. Forse la sintassi di un C# sarebbe stata più adatta. In ogni caso, sintassi a parte, .NET è sempre .NET.
Se hai già sviluppato in Object-Oriented-PHP non sei certo a zero.



La differenza tra Classi e Structures è notevole.
Inizia dalle Structures.

sisi sono PHP oop al 100% (se vuoi ti farò vedere alcune mega-classi in php .. modestia a parte mi ritengo molto ferrato sul php dopo 5 anni che ci smanetto dietro )

stavo pensando

visto che devo finirlo in qualche modo questo primo-progetto-schifoso ecco la mia idea :

questa è la parte incriminata
Codice:
 EMAIL = Comando_SmsPanel.ExecuteScalar()
se io trasformassi la variabile email (dichiarata : dim email as string) in un array ? e strasformo executescalar in un qualcosa (cosa??? ) che mi restituisca uno o piu risultati? in tal modo andrei a fare un rapido controllo sull array EMAIL , se esso contiene 1 oggetto faccio una cosa se ne contiene di piu un altra , puo funzionare ?
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 17:08   #14
-MiStO-
Senior Member
 
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2285
ciao
per avere n risultati ti serve chiamare executereader
http://msdn.microsoft.com/it-it/libr...=VS.80%29.aspx

per passare da un datareader a un datatable (da ciclare poi come meglio credi)
semplicemente:
Dim r As SqlDataReader = cmd.ExecuteReader
DIm dt as DataTable = new DataTable();
dt.Load(r);
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante...

-MiStO- è online   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 17:31   #15
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da -MiStO- Guarda i messaggi
ciao
per avere n risultati ti serve chiamare executereader
http://msdn.microsoft.com/it-it/libr...=VS.80%29.aspx

per passare da un datareader a un datatable (da ciclare poi come meglio credi)
semplicemente:
Dim r As SqlDataReader = cmd.ExecuteReader
DIm dt as DataTable = new DataTable();
dt.Load(r);
percio posso usare ExecuteReader senza un ciclo while reader.read() ?
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 18:48   #16
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
percio posso usare ExecuteReader senza un ciclo while reader.read() ?
Non mi butterei in strane alchimie, Ludo.

Codice:
While Reader_SmsGateway.Read()
            Avanti = Avanti + 1
            INBOXID = Reader_SmsGateway("INBOXID")
            ANUMBER = Reader_SmsGateway("ANUMBER")
            DEVICECODE = Reader_SmsGateway("DEVICECODE")
            SMSMESSAGE = Reader_SmsGateway("SMSMESSAGE")
            RECEIVEDDATE = Reader_SmsGateway("RECEIVEDDATE")
            TESTO = "Spedito da : " & ANUMBER & Chr(13) & " Ricevuto il : " & RECEIVEDDATE & Chr(13) & " Testo del messaggio : " & SMSMESSAGE
            Comando_SmsPanel.Connection = Connessione
            Comando_SmsPanel.CommandText = "SELECT email FROM numeri INNER JOIN email ON email.id_email = numeri.idemail WHERE numero = @DEVICECODE"
            'Per impostare un parametro in una clausola WHERE con SELECT bisogna Esplicitare il tipo ! e poi assegnarli il valore.
            Comando_SmsPanel.Parameters.Add("@DEVICECODE", OleDbType.VarChar)
            Comando_SmsPanel.Parameters("@DEVICECODE").Value = DEVICECODE
            Comando_SmsPanel.CommandType = CommandType.Text
            Connessione.Open()
            'Per assegnare ad una variabile il risultato di una query con SELECT singola bisogna usare ExecuteScalar() , il tipo varia in base alle necessità
            EMAIL = Comando_SmsPanel.ExecuteScalar()
Piuttosto che nidificare Readers meglio separare, no ?
Avrai un codice più prolisso, ma allo stato in cui sei è forse un problema ?

Quei campi che vedo nel Reader esterno :

INBOXID
ANUMBER
DEVICECODE
SMSMESSAGE
RECEIVEDDATE
TESTO
EMAIL

Eccola lì la Structure !
Sono tutti campi destinati a ricevere UN valore, eccetto EMAIL, che ne può avere 0,1,1+. Giusto ?

E allora EMAIL non può essere String, ma sarà un List(Of String).

Perciò usa il tuo Reader esterno, che ad ogni ciclo di lettura crea una nuova Structure, e la aggiunge ad una List(Of Structures).

A quel punto, per ogni Structure nella List(Of Structures), esegui la seconda query e popoli il campo EMAIL.

Ci sei ?
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 19:10   #17
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Ci sei ?
Ora come ora no ! ma il mio spirito curioso , la mia voglia e la mia (spero ) fortuna mi stanno consigliando di sbatterci la testa violentemente fino a stanotte
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2010, 20:12   #18
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
Ora come ora no ! ma il mio spirito curioso , la mia voglia e la mia (spero ) fortuna mi stanno consigliando di sbatterci la testa violentemente fino a stanotte
Deve esserti chiaro il procedimento che ho illustrato.
Al codice ci arrivi.
Se non hai capito il procedimento allora anche il codice non potrà che essere sbagliato.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2010, 15:49   #19
Ludo237
Member
 
L'Avatar di Ludo237
 
Iscritto dal: Feb 2009
Città: Varese
Messaggi: 205
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Deve esserti chiaro il procedimento che ho illustrato.
Al codice ci arrivi.
Se non hai capito il procedimento allora anche il codice non potrà che essere sbagliato.
e difatti non ho capito bene .. intanto ci provo a svilupparlo ma missa che qualcosa mi manca
Ludo237 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2010, 16:02   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Ludo237 Guarda i messaggi
e difatti non ho capito bene .. intanto ci provo a svilupparlo ma missa che qualcosa mi manca
Forse è tempo di mettere da parte per un attimo la tastiera, prendere carta & matita e il post di MarcoGG e leggere con calma cercando di capire bene. Consultando sistematicamente la documentazione online in caso di dubbi circa linguaggio e metodi/librerie.
Almeno è quello che farei io se fossi al tuo posto
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
Microsoft AI Diffusion Report: l'adozion...
Questo gioco è stato cancellato d...
Smartphone in ripresa a fine 2025: Apple...
Windows distrutto in una frase: il 'nuo...
iPhone 17 Pro da 512 GB in offerta: pote...
Apple lancia Creator Studio: Final Cut P...
Bandcamp vieta la musica generata dall'I...
Volvo contro Sunwoda, botta e risposta: ...
GRU Space vuole costruire un hotel sulla...
Games Workshop dice no all'IA: per Warha...
Veo 3.1 si aggiorna: arrivano i video in...
NVIDIA pronta a tagliare la produzione d...
Toyota si tiene la corona (anche nel 202...
WhatsApp, in Italia restano i chatbot di...
Connessioni mobile in Italia: chi naviga...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v