Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Problema con executeScalar che restituisce un valore NUll
domenica 28 febbraio 2010 - 07.16
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
dom 28 feb 2010 - 07:16
Ciao amici.
Mi sono imbattuto in questo problema:
Esegue delle query di inserimento ed aggiornamento dati, utilizzando il costrutto sql "IF EXISTS (....) update ........."
utilizzo executeScalar per prelevare l'id del record appena aggiunto, popolando una variabile di tipo integer con il valore restituito da executeScalar.
Che cosa accade:
1) se il record non esisteva tutto fila liscio avviene l'inserimento e la mia variabile "idRec" record viene mestamente popolata:
idRec= m_cmd.ExecuteScalar()
2)Sorpresona! Se il record esiste, il set di risultati è chiaramente vuoto, e quindi, giustamente executeScalar restituisce "null".
Quale è la strada migliore tra le seguenti:
1)idRec as string, così se executScalar è null idRec sarà stringa vuota;
idRec = m_cmd.ExecuteScalar().ToString
2)idRec as Object così la mia variabile "squillo" prende qualunque cosa arrivi.
Dim idRec As Object = Nothing
idRec = m_cmd.ExecuteScalar()
Grazie a tutti
Riccardo D'Aria
tonyexpo
Profilo
| Senior Member
229
messaggi | Data Invio:
dom 28 feb 2010 - 16:18
ciao
puoi fare così:
1:
dim risp as object = mycm.ExecuteScalar()
if risp isnot DBNull.Value Then OK else E' NULL
2:
dim i as Nullable(of integer) = mycm.ExecuteScalar()
if i.HasValue then E' OK else E' null
Antonio Esposito
MCTS, MCP
http://blogs.dotnethell.it/espositos
mauronet
Profilo
| Newbie
2
messaggi | Data Invio:
gio 8 lug 2010 - 20:39
Ciao Antonio.
Ho letto una tua risposta e mi sembri molto preparato su ExecuteScalar() e VB.
Ti vorrei chiedere quindi la cortesia di aiutarmi in questo codice perchè ci sto impazzendo. Devo rilevare da un db Access un valore che in Access è 'Intero lungo'. L'ExecuteScalar MI DA ERRORE DI TIPI NON CORRISPONDENTI.
Ho scritto questo codice:
DIM codice as String '**** ma anche se gli do Integer o Long mi da lo stesso errore
'apro la connessione
connessione = New OleDbConnection(stringaDiConnessione)
connessione.Open()
'definisco il comando Select per verifica articolo già esistente (non è consentito)
comandoSQL = New OleDbCommand("SELECT IDCodiceArt FROM ArticoliAnagrafica Where IDCodiceArt = '" & codice & "' ", connessione)
'verifico esistenza
If CType(comandoSQL.ExecuteScalar, String) = codice Then '******** QUI MI DA ERRORE DI TIPI NON CORRISPONDENTI *********
MsgBox("Occhio! Esiste già l'articolo: " & codice & " " & descrizione)
End If
*** Cosa sto sbagliando?
Grazie mille in anticipo e auguri per tutto.
Mauro.
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
ven 9 lug 2010 - 09:22
>Ciao Antonio.
>
>Ho letto una tua risposta e mi sembri molto preparato su ExecuteScalar()
>e VB.
>Ti vorrei chiedere quindi la cortesia di aiutarmi in questo codice
>perchè ci sto impazzendo. Devo rilevare da un db Access un valore
>che in Access è 'Intero lungo'. L'ExecuteScalar MI DA ERRORE
>DI TIPI NON CORRISPONDENTI.
>
>Ho scritto questo codice:
>
>DIM codice as String '**** ma anche se gli do Integer o Long
>mi da lo stesso errore
>
> 'apro la connessione
>connessione = New OleDbConnection(stringaDiConnessione)
> connessione.Open()
>
>'definisco il comando Select per verifica articolo già esistente
>(non è consentito)
>comandoSQL = New OleDbCommand("SELECT IDCodiceArt FROM ArticoliAnagrafica
>Where IDCodiceArt = '" & codice & "' ", connessione)
il primo errore lo commetti qui sopra
se IdCodiceArt è di tipo Intero Lungo, non puoi dirgli di confrontarlo con un valore di tipo stringa, ed il valore di tipo stringa no è dato dal tipo della variabile codice, ma dal fatto che tu la chiudi tra le apici:
' " & codice & " ' "
Comincia a sistemare questo.
>*** Cosa sto sbagliando?
Ciao Riccardo
Riccardo D'Aria
mauronet
Profilo
| Newbie
2
messaggi | Data Invio:
ven 9 lug 2010 - 11:07
Ciao Riccardo!
ti ringrazio infinitamente per l'interessamento.
Mi hai dato un indizio che mi ha aiutato, ma ho dovuto risolvere con un 'pre-commando' per formattare la stringa SELECT affinchè piacesse di più a ExecuteScalar.
Ho fatto così:
'dichiarazione formato LONG della variabile **********
Dim codice As Long
'apro la connessione
connessione = New OleDbConnection(stringaDiConnessione)
connessione.Open()
'definisco parte del comando ****** ho dovuto fare questo, ORA FUNZIONA! *******
Dim mycmd As String = "SELECT IDCodiceArt FROM ArticoliAnagrafica Where IDCodiceArt ="
'definisco il comando Select per verifica articolo già esistente (non è consentito)
comandoSQL = New OleDbCommand(mycmd & codice, connessione)
'verifico esistenza
If CType(comandoSQL.ExecuteScalar, String) = codice Then
MsgBox("Occhio! Esiste già l'articolo: " & codice & " " & descrizione)
End If
FUNZIONA!!!
Ti ringrazio e a presto.
Mauro.
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
sab 10 lug 2010 - 16:39
se ti sono stato di aiuti chiudi il post flaggando la mia rsposta come accettata
ciao e grazie
Riccardo D'Aria
Torna su
Stanze Forum
Elenco Threads
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 !