none
Query di ricerca che restituisce vero o falso RRS feed

  • Domanda

  • Buongiorno a tutti e buona domenica, premettendo che sono auto didatta e quindi con grandi lacune :-) vi chiedo un aiutino per il mio problema...sicuramente a voi semplice.

    Ho un database con all'interno alcune tabelle, dentro alle tabelle una serie di record, dovrei fare un controllo di presenza di un codice in una di queste tabelle, per verificare che non ne esista uno "uguale", pensavo di creare una query di ricerca del codice che vorrei controllare e quindi dovrebbe restituirmi solo vero o falso, in modo da poter modificare il codice, ma non riesco a capire come fare...

    Grazie

    Guido

    domenica 30 agosto 2015 09:08

Tutte le risposte

  • Non so se sono sulla buona strada, ho trovato che andrebbe utilizzato l'operatore NULL per falsa e IS NULL per vera, ma in una query di questo tipo come si incorpora?

    SELECT IdManutenzioni, Codice_Manutenzioni, Codice_Lavorazioni, Data_Manutenzione, Tipo_Manutenzione, Descrizione_Manutenzione, Note, c1, c2, c3 FROM dbo.Table_Manutenzioni
    WHERE (Codice_Manutenzioni = @Codice_Manutenzioni) ORDER BY Codice_Manutenzioni
    Questa farebbe la ricerca del dato...

    domenica 30 agosto 2015 09:35
  • Non so se sono sulla buona strada, ho trovato che andrebbe utilizzato l'operatore NULL per falsa e IS NULL per vera, ma in una query di questo tipo come si incorpora?

    SELECT IdManutenzioni, Codice_Manutenzioni, Codice_Lavorazioni, Data_Manutenzione, Tipo_Manutenzione, Descrizione_Manutenzione, Note, c1, c2, c3 FROM dbo.Table_Manutenzioni
    WHERE (Codice_Manutenzioni = @Codice_Manutenzioni) ORDER BY Codice_Manutenzioni
    Questa farebbe la ricerca del dato...


    Con ado.net, la query ti restituisce un insieme di "record". Se questo insieme non contiene elementi (cioè la sua dimensione è zero) vuol dire che la ricerca non ha avuto esito positivo.


    • Modificato BlueLed domenica 30 agosto 2015 09:42
    domenica 30 agosto 2015 09:40
  • Ciao BlueLed, cercando ho provato a fare così...non so se è il modo migliore:

    ho creato una query che mi restituisse il valore cercato, siccome creo le query in modo guidato...perdonate..ma di meglio non riesco, ho fatto la sequenza di creazione per la restituzione di un valore e scritta la seguente query:

    SELECT Codice_Manutenzioni
    FROM Table_Manutenzioni
    WHERE (Codice_Manutenzioni  = @Param1)

    questa mi restituisce il valore cercato se esiste altrimenti mi da valore NULL, da qui verifico se esiste o no.

    Giusto?

    Guido

    domenica 30 agosto 2015 10:07
  • Ciao BlueLed, cercando ho provato a fare così...non so se è il modo migliore:

    ho creato una query che mi restituisse il valore cercato, siccome creo le query in modo guidato...perdonate..ma di meglio non riesco, ho fatto la sequenza di creazione per la restituzione di un valore e scritta la seguente query:

    SELECT Codice_Manutenzioni
    FROM Table_Manutenzioni
    WHERE (Codice_Manutenzioni  = @Param1)

    questa mi restituisce il valore cercato se esiste altrimenti mi da valore NULL, da qui verifico se esiste o no.

    Giusto?

    Guido

    Dovrebbe andare bene. In quale contesto la esegui? Ado.Net? CodeFirst? Chi più ne ha più ne metta?

    domenica 30 agosto 2015 10:15
  • ho usato un database creato in LocalDB v11.0, spero fosse questo quello che volevi sapere...soprattutto per chi legge ed ha necessità di trovare una soluzione..
    domenica 30 agosto 2015 10:30
  • ho usato un database creato in LocalDB v11.0, spero fosse questo quello che volevi sapere...soprattutto per chi legge ed ha necessità di trovare una soluzione..

    Comunque tu usi il Visual Basic, quindi anche in questo caso suppongo che hai lanciato la query tramite VB.NET.

    domenica 30 agosto 2015 10:50
  • si, infatti, non ho postato il codice perché pensavo che non fosse corretto inserirlo in un forum SQL....

    Stavo guardando sul web per fare in modo che la query restituisse True o False usando il comando IF...ma non c'ho capito molto...potresti darmi un esempio e se possibile una piccola spiegazione? utilizzando l'ultima query postata... :-)

    Grazie in anticipo...


    • Modificato Guido.G domenica 30 agosto 2015 11:22 correzione
    domenica 30 agosto 2015 11:12
  • si, infatti, non ho postato il codice perché pensavo che non fosse corretto inserirlo in un forum SQL....

    Stavo guardando sul web per fare in modo che la query restituisse True o False usando il comando IF...ma non c'ho capito molto...potresti darmi un esempio e se possibile una piccola spiegazione? utilizzando l'ultima query postata... :-)

    Grazie in anticipo...


    Qui ci sono esempi su come connettersi al db con Ado.Net

    https://msdn.microsoft.com/it-it/library/dw70f090%28v=VS.110%29.aspx

    Non ti serve ottenere True o False dalla query. Se il risultato della query viene memorizzato in un DbDataReader, come ad esempio SqlDataReader, la variabile di tipo DbDataReader avrà una proprietà chiamata HasRows che vale true se il risultato della query contiene almeno una riga o false altrimenti.


    • Modificato BlueLed domenica 30 agosto 2015 11:39
    domenica 30 agosto 2015 11:36
  • Dunque...ho provato a vedere sul link che mi hai  postato e tanti altri correlati....ma non ho capito come poterlo usare nel mio caso....
    domenica 30 agosto 2015 12:51
  • ad esempio nel Link si trova questo esempio:

    Private Sub HasRows(ByVal connection As SqlConnection)
        Using connection
            Dim command As SqlCommand = New SqlCommand( _
              "SELECT CategoryID, CategoryName FROM Categories;", _
              connection)
            connection.Open()
    
            Dim reader As SqlDataReader = command.ExecuteReader()
    
            If reader.HasRows Then
                Do While reader.Read()
                    Console.WriteLine(reader.GetInt32(0) _
                      & vbTab & reader.GetString(1))
                Loop
            Else
                Console.WriteLine("No rows found.")
            End If
    
            reader.Close()
        End Using
    End Sub
    però usano (perdonate la mia sintassi errata) creare la query sotto command, ma io la query già l'ho impostata nel database e non capisco come poter fare...

    e...come si fa a capire da quale tabella leggerà idat? capisco che se, come nell'esempio lo indica la query.... ma se c'è il modo di non scrivere la query come nell'esempio e quindi usare quella memorizzata nel DB...come fare?
    • Modificato Guido.G domenica 30 agosto 2015 13:07
    domenica 30 agosto 2015 12:57
  • ad esempio nel Link si trova questo esempio:

    Private Sub HasRows(ByVal connection As SqlConnection)
        Using connection
            Dim command As SqlCommand = New SqlCommand( _
              "SELECT CategoryID, CategoryName FROM Categories;", _
              connection)
            connection.Open()
    
            Dim reader As SqlDataReader = command.ExecuteReader()
    
            If reader.HasRows Then
                Do While reader.Read()
                    Console.WriteLine(reader.GetInt32(0) _
                      & vbTab & reader.GetString(1))
                Loop
            Else
                Console.WriteLine("No rows found.")
            End If
    
            reader.Close()
        End Using
    End Sub
    però usano (perdonate la mia sintassi errata) creare la query sotto command, ma io la query già l'ho impostata nel database e non capisco come poter fare...

    e...come si fa a capire da quale tabella leggerà idat? capisco che se, come nell'esempio lo indica la query.... ma se c'è il modo di non scrivere la query come nell'esempio e quindi usare quella memorizzata nel DB...come fare?

    Che vuol dire che hai la "query impostata nel database" ?

    Hai una stored procedure? In tal caso qui mostra come eseguirla:
    https://support.microsoft.com/it-it/kb/310070

    domenica 30 agosto 2015 14:10
  • volevo dire questo:

    ho provato a vedere il link...mi dispiace..forse è troppo complicato per me...non ci arrivo.. :-(

    e non è uno stored procedure...
    • Modificato Guido.G domenica 30 agosto 2015 16:50 correzione
    domenica 30 agosto 2015 15:11
  • volevo dire questo:

    ho provato a vedere il link...mi dispiace..forse è troppo complicato per me...non ci arrivo.. :-(

    e non è uno stored procedure...

    Il table adapter che ti ha creato il wizard dovrebbe gestire un data table. Se il numero di righe del data table è zero vuol dire che la query non ha prodotto risultati.

    Per quanto il wizard possa automatizzare le cose, ti sarà difficile poi usarne i risultati se non conosci Ado.Net.

    domenica 30 agosto 2015 17:11
  • certo hai perfettamente ragione, proverò a prendere un libro sull'argomento e vedere di capirci qualcosa....hai un suggerimento?

    qualcosa che possa capire...visto che...essendo autodidatta e non un professionista ...

    grazie delle spiegazioni e dei riferimenti per l'aiuto.

    Guido

    lunedì 31 agosto 2015 07:10
  • certo hai perfettamente ragione, proverò a prendere un libro sull'argomento e vedere di capirci qualcosa....hai un suggerimento?

    qualcosa che possa capire...visto che...essendo autodidatta e non un professionista ...

    grazie delle spiegazioni e dei riferimenti per l'aiuto.

    Guido

    Puoi guardare qui:

    "Recupero e modifica di dati in ADO.NET"
    https://msdn.microsoft.com/it-it/library/ms254937%28v=vs.110%29.aspx

    "DataSet, DataTable e DataView"
    https://msdn.microsoft.com/it-it/library/ss7fbaez%28v=vs.110%29.aspx

    "ADO.NET"
    https://msdn.microsoft.com/it-it/library/e80y5yhx%28v=vs.110%29.aspx

    ___________________________________

    La query per il vero o falso la puoi fare così:

    SELECT COUNT(*) > 0
    FROM Table_Manutenzioni
    WHERE Codice_Manutenzioni = @Param1

    ti restituisce 1 o 0

    lunedì 31 agosto 2015 08:25
  • certamente BlueLed ti ha messo sulla strada giusta ma io non ho capito se tu vuoi lavorare con il codice di una applicazione esterna oppure vuoi lavorare solo con T-SQL dentro al database.

    puoi spiegarti meglio ?

    la ricerca di questo codice a cosa ti serve ?


    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    lunedì 31 agosto 2015 08:35
    Moderatore
  • Grazie BlueLed, proverò a leggere vedere se riesco a capirci qualcosa e proverò la query.

    Ciao Edoardo, all'inizio cercavo una query...ma anche l'uso di ADO non mi dispiace, visto che provo a pasticciare in VB.net, ma come dico sempre...fino alla nausea...sono autodidatta e quindi con un mare di lacune, sono interessanti entrambi i modi....

    a me serviva per fare un controllo in una cella di una tabella, verificando se esiste un dato ugualea quello che l'applicazione sta creando, in modo da non crearne uno già esistente.

    Guido


    • Modificato Guido.G lunedì 31 agosto 2015 10:29 correzione
    lunedì 31 agosto 2015 09:56
  • Ciao...

    io farei una di queste 3 cose (in ordine di preferenza):

    - indice univoco sul campo di ricerca interessato

    - sp con parametro di controllo e codice "IF EXIST (tua select)"

    - usare nel codice "IF EXIST  (tua select)"



    • Modificato Piv47 martedì 1 settembre 2015 08:24
    martedì 1 settembre 2015 08:22