Clausola where con OR e AND

mercoledì 18 luglio 2007 - 18.13

_J_ Profilo | Senior Member

ciao ragazzi,
ho un piccolo problema con questa query:

SELECT cittadino.cod_persona, cittadino.primo_nome, cittadino.secondo_nome, cittadino.cognome, ha_stato_civile.flag_sc_corrente, tabella_decod_st_civile.nome_stato_civile
FROM ha_stato_civile INNER JOIN cittadino ON ha_stato_civile.cod_persona = cittadino.cod_persona INNER JOIN tabella_decod_st_civile ON ha_stato_civile.cod_stato_civile = tabella_decod_st_civile.cod_stato_civile
WHERE
((cittadino.cod_persona = @cod_persona) AND (ha_stato_civile.flag_sc_corrente LIKE '%s%'))
OR
((cittadino.primo_nome = @primo_nome) AND (ha_stato_civile.flag_sc_corrente LIKE '%s%'))
OR
((cittadino.secondo_nome = @secondo_nome) AND (ha_stato_civile.flag_sc_corrente LIKE '%s%'))
OR
((cittadino.cognome = @cognome) AND (ha_stato_civile.flag_sc_corrente LIKE '%s%'))

in teoria dovrebbe tirarmi fuori alcuni record in base all'inserimento del cod_persona OPPURE all'inserimento del cognome OPPURE all'inserimento del primo_nome ecc... il tutto filtrato dalla condizione 'stato civile corrente=sì' (ha_stato_civile.flag_sc_corrente LIKE '%s%')

il problema sta negli OPPURE, nel senso che non mi tira fuori nulla se non ho compilato prima TUTTI i campi che forniscono i parametri... insomma come se al posto degli or avessi messo degli and...
inoltre dovrei poter estrarre dei record in base all'inserimento di anche un solo campo che non sia necessariamente la chiave primaria.... mentre se non immetto il cod_persona (che è appunto la chiave primaria della tabella 'cittadino') mi dice che la stringa di input è errata...

dove ho sbagliato?


_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>ciao ragazzi,
Ciao!

A prescindere dal fatto che quella query avrà un piano di esecuzione decisamente non ottimizzato, ti chiedo di postare la create della tabella, la insert dei record e che dbms utilizzi.

>inoltre dovrei poter estrarre dei record in base all'inserimento
>di anche un solo campo che non sia necessariamente la chiave
>primaria.... mentre se non immetto il cod_persona (che è appunto
>la chiave primaria della tabella 'cittadino') mi dice che la
>stringa di input è errata...
>dove ho sbagliato?
Il problema sta nel codice. Quando cerchi di lanciare l'esecuzione della query un particolare metodo si aspetta un parametro che non gli passi.
>
>
>_J_
>
>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
>
>"Conosco me stesso? No, non parlo con gli estranei..."

Alx81 =)

http://blogs.dotnethell.it/suxstellino

bluelions Profilo | Senior Member

Innanzitutto ti darei un consiglio, cerca di evitare gli INNER JOIN, in quanto una query cosi è poco ottimizzata, poi bisogna capire meglio come hai gestito la query è il tipo di errore che ti da.
Comunque quella che tu hai creato sicuramente l'hai generata con qualche editor, io ti ho eliminato gli inner join,mettendo nella clausola FROM le tabelle, poi ti ho messo in ordine gli OR e alla fine vedo che in alcune colonne gli passi dei parametri....ma li passi o li lasci cosi?
Se li lasci come stanno è ovvio che ti da errore.

SELECT cittadino.cod_persona, cittadino.primo_nome, cittadino.secondo_nome, cittadino.cognome, ha_stato_civile.flag_sc_corrente, tabella_decod_st_civile.nome_stato_civile
FROM ha_stato_civile,cittadino,tabella_decod_st_civile
WHERE ha_stato_civile.cod_persona = cittadino.cod_persona
AND cod_stato_civile = tabella_decod_st_civile.cod_stato_civile
AND
(cittadino.cod_persona = @cod_persona AND ha_stato_civile.flag_sc_corrente LIKE '%s%')
OR
(cittadino.primo_nome = @primo_nome AND ha_stato_civile.flag_sc_corrente LIKE '%s%')
OR
(cittadino.secondo_nome = @secondo_nome AND ha_stato_civile.flag_sc_corrente LIKE '%s%')
OR
(cittadino.cognome = @cognome AND ha_stato_civile.flag_sc_corrente LIKE '%s%')

alx_81 Profilo | Guru

>Innanzitutto ti darei un consiglio, cerca di evitare gli INNER
>JOIN, in quanto una query cosi è poco ottimizzata,
???? e perchè mai dovrebbe evitare l'inner join? non è sicuramente quello il motivo della scarsa ottimizziazione!

> poi bisogna capire meglio come hai gestito la query è il tipo di errore che
>ti da.
>Comunque quella che tu hai creato sicuramente l'hai generata
>con qualche editor, io ti ho eliminato gli inner join,mettendo
>nella clausola FROM le tabelle,
, è la stessa identica cosa per SQL Server. INNER JOIN o WHERE su FROM multiple vengono interpretate nel medesimo modo.. quella con la FROM a tabelle multiple è solo una forma obsoleta di indicare le relazioni..

>poi ti ho messo in ordine gli
>OR e alla fine vedo che in alcune colonne gli passi dei parametri....ma
>li passi o li lasci cosi?
>Se li lasci come stanno è ovvio che ti da errore.
Come ripeto, l'errore che ottiene non è lato DB.. sembra uno dei più classici errori del Framework (Input String Was Not in a Correct format)..



Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao!
Innanzitutto grazie ad entrambi per l'interessamento

Ho usato l'inner join perchè conoscendo la sintassi sql ho creduto fosse meglio così... e ho usato l'editor solo per motivi di sintassi, affinchè fossi più sicuro della correttezza del codice che volevo scrivere... solo per questo uso gli editor..

comunque alx cosa intendi per insert dei record? per adesso non ho pianificato alcuna insert (ma dovrò farò quanto prima... come anche delete ed update)
per quel che riguarda le altre tue richieste... uso sql server2005 e inoltre le tabelle: 'cittadino' è collegata a 'tabella_decod_st_civile' mediante 'ha_stato_civile':


CREATE TABLE `CITTADINO`
(
`COD_PERSONA` INT(7),
`PRIMO_NOME` VARCHAR(30),
`SECONDO_NOME` VARCHAR(30),
`COGNOME` VARCHAR(30),
`SESSO` VARCHAR(1),
`DATA_ORA_MIN_NASCITA` DATETIME,
`COD_ISTAT_COM_ITA_NASCITA` INT(6),
`COD_COM_EST_NASCITA` INT(6),
`COD_ISTAT_COM_ITA_PRIMA_ISCR` INT(6),
`COD_COM_EST_PRIMA_ISCR` INT(6),
`COD_PADRE` INT(7),
`COD_MADRE` INT(7),
`COD_FISCALE` VARCHAR(16),
`PRIMA_CITTADINANZA` VARCHAR(3) ,
`SECONDA_CITTADINANZA` VARCHAR(3),
`NR_ATTO_ISCRIZIONE` INT(3),
`PARTE_I` INT(1),
`SERIE_I` VARCHAR(1),
`UFFICIO_I` VARCHAR(1),
`VOLUME_I` INT(1),
`DATA_I` DATETIME,
`NR_ATTO_TRASCRIZIONE` INT(3),
`PARTE_T` INT(1),
`SERIE_T` VARCHAR(1),
`UFFICIO_T` VARCHAR(1),
`VOLUME_T` INT(1),
`DATA_T` DATETIME,
`COD_CONDIZIONE` VARCHAR(1),
`COD_TITOLO_STUDIO` INT(2),
`COD_PROFESSIONE` INT(2),
`COD_RAMO_ATTIVITA` INT(2)
)


CREATE TABLE `HA_STATO_CIVILE`
(
`COD_PERSONA` INT(7) ,
`COD_STATO_CIVILE` VARCHAR(1) ,
`DATA_VARIAZIONE_SC` DATETIME,
`FLAG_SC_CORRENTE` VARCHAR(1)
)


CREATE TABLE `TABELLA_DECOD_ST_CIVILE`
(
`COD_STATO_CIVILE` VARCHAR(1) ,
`NOME_STATO_CIVILE` VARCHAR(30)
)


se ti serve qcs altro, chiedi pure...
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>ciao!
Ciao!

>Ho usato l'inner join perchè conoscendo la sintassi sql ho creduto
>fosse meglio così... e ho usato l'editor solo per motivi di sintassi,
>affinchè fossi più sicuro della correttezza del codice che volevo
>scrivere... solo per questo uso gli editor..
Se vuoi un consiglio, cerca di studiarti bene le sintassi e di evitare gli editor.. otterrai maggior controllo e migliore scrittura (dal punto di vista dell'indentazione e della formattazione in generale)..

>comunque alx cosa intendi per insert dei record? per adesso non
>ho pianificato alcuna insert (ma dovrò farò quanto prima... come
>anche delete ed update)
chiedevo un esempio con insert di prova, per vedere come riuscire a realizzare quello che ti serve.
comunque proviamo ad arrangiarci.

>per quel che riguarda le altre tue richieste... uso sql server2005
Ma che cosa hai usato per fare lo script delle tabelle? Int con il parametro lunghezza in sql server non esiste ;
Altra cosa.. non hai fatto nemmeno una chiave primaria? tutti i camp possono contenere NULL? nessun indice? nessuna Foreign key?
Scusa se ti faccio queste domande.. ma sono tutte cose che dovrebbero essere considerate per una buona modellizzazione della base dati.


comunque, guardati questo semplice script di esempio. Ho cercato di sistemare un po' le naming convention, i tipi dato, le chiavi primarie mancanti, le foreign key e quant'altro..
copialo e incollalo sul tuo SQL Server Management Studio, ti crea le strutture su tempdb. Alla fine, lancia solo la parte di pulizia per eliminare le tabelle di prova..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Sembra funzionare tutto. Quindi i problemi possono essere legati sia all'applicativo che non passa correttamente i dati al db, sia alla mancanza di dati inseriti correttamente. Per prevenire dati sporchi, dati non legati correttamente fra loro, insomma.. per fare in modo che il db sia integro, cerca sempre di fare le foreign key per le relazioni tra tabelle. Esse possono controllare che i valori siano inseriti nell'ordine giusto e nel modo corretto per ottenere la relazione.


>_J_
>
>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
>
>"Conosco me stesso? No, non parlo con gli estranei..."

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao!

scusami ma credevo intendessi dire solo la creazione delle tabelle... le chiavi primarie ed esterne le ho fatte eccome, solo che le ho create in maniera separata, nel senso ho usato prima create table e poi alter table.. e a te ho dato solo la parte 'create table', ma ora rimedio...
una cosa: la sintassi è quella del mysql, che ho usato prima (... mi trovo meglio col sql server)... e mi scuso con te visto che non l'ho mai corretta, perchè l'ho usata come riferimento per le dimensioni dei campi (per i validator di cui ti chiesi qualche tempo fa)

-------------------------------------------------- chiavi primarie delle tabelle 'cittadino' e 'tabdec_stato_civile'-----------------
ALTER TABLE `CITTADINO`
ADD
(
CONSTRAINT `PK_CITTADINO`
PRIMARY KEY (`COD_PERSONA`)
);


ALTER TABLE `TABELLA_DECOD_ST_CIVILE`
ADD
(
CONSTRAINT `PK_SC`
PRIMARY KEY (`COD_STATO_CIVILE`)
);
---------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------chiavi esterne per 'ha_stato_civile'--------------------------------------

ALTER TABLE `HA_STATO_CIVILE`
ADD
(
CONSTRAINT `FK_SC_DI_CITTADINO` //si collega a 'tab_dec_stato_civile'
FOREIGN KEY (`COD_STATO_CIVILE`) REFERENCES `TABELLA_DECOD_ST_CIVILE` (`COD_STATO_CIVILE`)
);



ALTER TABLE `HA_STATO_CIVILE`
ADD
(
CONSTRAINT `FK_CITTADINO_HA_SC` //si si collega a 'cittadino'
FOREIGN KEY (`COD_PERSONA`) REFERENCES
`CITTADINO` (`COD_PERSONA`)
);

-------------------------------------------------------------------------------------------------------------------------------

Per quel che riguarda i NOT NULL: solo le chiavi primarie sono Not Null (scusami per la mancanza, correggerò quanto prima la sintassi...)

Passando alle query...cmq i dati me li passa tranquillamente quando uso la select con il where senza or o and, non ho problemi... il problema sta quando appunto uso gli operatori logici, ho un or che si comporta come un and, e si lamenta quando non inserisco la chiave primaria (perchè chiaramente, essendo not null, non posso fare ricerche senza inserire nulla, ma la cosa strana è: anche se uso or??? )

cmq grazie x lo script , lo guarderò quanto prima!
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

bluelions Profilo | Senior Member

???? e perchè mai dovrebbe evitare l'inner join? non è sicuramente quello il motivo della scarsa ottimizziazione!

Non ho detto che il motivo dell'errore è quello,ma semplicemnte che utilizzando questa sintassi il codice è più leggibile e da piena compatibilità,visto che è uno standard e d inoltre per evitare forme obsolete.
E poi avevo detto di non utilizzare gli editor e cercare di scrivere il maggior possibile, cosa che hai ripetuto tu nel post.
tutto qua......
Facciamo troppo i sapientini

alx_81 Profilo | Guru

>ciao!
Ciao!
>
>scusami ma credevo intendessi dire solo la creazione delle tabelle...
>le chiavi primarie ed esterne le ho fatte eccome, solo che le
>ho create in maniera separata, nel senso ho usato prima create
>table e poi alter table.. e a te ho dato solo la parte 'create
>table', ma ora rimedio...
>una cosa: la sintassi è quella del mysql, che ho usato prima
>(... mi trovo meglio col sql server)... e mi scuso con te
>visto che non l'ho mai corretta, perchè l'ho usata come riferimento
>per le dimensioni dei campi (per i validator di cui ti chiesi
>qualche tempo fa)
Nessun problema.. l'importante è che ci siano almeno le chiavi.
Resta il fatto che le foreign key dovresti farle per l'integrità

>Per quel che riguarda i NOT NULL: solo le chiavi primarie sono
>Not Null (scusami per la mancanza, correggerò quanto prima la
>sintassi...)
In questo caso non è problema di sintassi.. sono vincoli che tu dai ai campi.
Potrebbe anche essere che in tutti i campi non chiave tu accetti i null.. anche se direi che è improbabile
>
>Passando alle query...cmq i dati me li passa tranquillamente
>quando uso la select con il where senza or o and, non ho problemi...
>il problema sta quando appunto uso gli operatori logici, ho un
>or che si comporta come un and,
mmmmmh.. permettimi di essere un po' scettico.. ho provato qualche valore nei parametri e sia la tua che la mia query tornano i valori per cui la query è stata scritta.. se tu metti due valori validi (come ad esempio, nome e cognome, ma nome di una persona e cognome di un'altra) potresti avere due record. Proprio perhè è in or.. Con quella query SQL Server ti torna i record in cui le info che passi si verificano in maniera distinta. E funziona correttamente.

> e si lamenta quando non inserisco
>la chiave primaria (perchè chiaramente, essendo not null, non
>posso fare ricerche senza inserire nulla, ma la cosa strana è:
>anche se uso or??? )
Credo che qui tu faccia un po' di confusione. Come ti torno a ripetere, in fase di insert o update tu NON PUOI inserire valori null sulla chiave. Ma in lettura, un parametro null sulla chiave è lecito! saranno poi gli altri OR a ricavare eventuali record. Tu puoi passare anche un solo parametro non chiave che la query funziona. Ma una cosa ti devo chiedere: hai provato ad eseguire le tue query prima da SQL Server che dall'applicativo? è buona norma farlo. Poichè tra l'applicazione e il db a volte, succedono cose di cui non ti rendi conto a prima vista. Provale prima su DB, poi, quando sei sicuro, crea la parte di applicazione.

>cmq grazie x lo script , lo guarderò quanto prima!
vedrai che nello script tutto funge

Alx81 =)

http://blogs.dotnethell.it/suxstellino

alx_81 Profilo | Guru

@bluelions:

>Innanzitutto ti darei un consiglio, cerca di evitare gli INNER
>JOIN, in quanto una query cosi è poco ottimizzata,
a me sembra una frase che hai detto tu e non mi sembrava pienamente corretta.. in più ho sottolineato che inner join e from multiple sono la stessa cosa per il motore, nulla più

>Non ho detto che il motivo dell'errore è quello,
E infatti io non ho detto che il motivo dell'errore era quello.. ma che la inner join non è quello che rende la query poco ottimizzata.

>ma semplicemnte che utilizzando questa sintassi il codice è più leggibile e da piena
>compatibilità,visto che è uno standard e d inoltre per evitare forme obsolete.
Ehm.. non vorrei fare il pignolo, ma la forma obsoleta è proprio quella delle from con più tabelle.. Ormai tutti i DBMS si sono adattati alla nuova forma, che, sempre a mio avviso, rende il tutto molto più leggibile.. Se guardi lo script e indenti come ho fatto, direi che si legge benone no? . Poi, dobbiamo pensare che lui utilizza SQL Server, e che quindi è buona norma ottimizzare il codice scritto per il motore che si usa, non credi?

>E poi avevo detto di non utilizzare gli editor e cercare di scrivere il maggior possibile, cosa che hai ripetuto tu nel post.
>tutto qua......
Credo di non averti rimproverato di averlo detto

>Facciamo troppo i sapientini
Ok, ognuno ha le sue opinioni e apprezzo la tua critica.. ma per me era solo una discussione.. e l'emoticon sbalordito era perchè sembrava, da quel che hai scritto, che la query con la inner join fosse poco ottimizzata, mentre con la where no..
Non c'è assolutamente bisogno di andare a discutere di cose simili ..
Grazie e ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

>mmmmmh.. permettimi di essere un po' scettico.. ho provato qualche
>valore nei parametri e sia la tua che la mia query tornano i
>valori per cui la query è stata scritta.. se tu metti due valori
>validi (come ad esempio, nome e cognome, ma nome di una persona
>e cognome di un'altra) potresti avere due record. Proprio perhè
>è in or.. Con quella query SQL Server ti torna i record in cui
>le info che passi si verificano in maniera distinta. E funziona
>correttamente.

ma il problema non è che mi tira fuori due record nel caso che hai detto tu (che ho risolto 5 minuti fa...), è quello della chiave primaria

>Credo che qui tu faccia un po' di confusione. Come ti torno a
>ripetere, in fase di insert o update tu NON PUOI inserire valori
>null sulla chiave. Ma in lettura, un parametro null sulla chiave
>è lecito! saranno poi gli altri OR a ricavare eventuali record.
>Tu puoi passare anche un solo parametro non chiave che la query
>funziona. Ma una cosa ti devo chiedere: hai provato ad eseguire
>le tue query prima da SQL Server che dall'applicativo? è buona
>norma farlo. Poichè tra l'applicazione e il db a volte, succedono
>cose di cui non ti rendi conto a prima vista. Provale prima su
>DB, poi, quando sei sicuro, crea la parte di applicazione.

quando ti ho detto che mi crea problemi quando 'inserisco' la chiave primaria, intendevo dire 'inserisco nelle textbox addette alla ricerca', e non in una insert o update (che devo ancora fare)... è colpa mia, scusami se non ho specificato a dovere...

ti dirò che la query l'ho provata mediante wizard, e funziona... qualche tempo fa provai anche mediante il 'navicat' (front-end per mysql).. cmq ammetto che le prove di solito le faccio tutto mediante VS, ma perchè conosco ancora poco gli strumenti alternativi...
tipo quello che hai detto tu, il SQL Server Management Studio... ho cercato per vedere se VS mi avesse fornito pure quello ma non c'è... c'è solo 'configuration tools' che non credo serva allo scopo...

_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>quando ti ho detto che mi crea problemi quando 'inserisco' la
>chiave primaria, intendevo dire 'inserisco nelle textbox addette
>alla ricerca', e non in una insert o update (che devo ancora
>fare)... è colpa mia, scusami se non ho specificato a dovere...
ooops.. ok nessun problema.. colpa mia
>
>ti dirò che la query l'ho provata mediante wizard, e funziona...
Proprio per questo hai bisogno di fare un debug approfondito sul codice..
usa le watch, o le quick watch e scopri cosa non funziona.. e in che evento..

>qualche tempo fa provai anche mediante il 'navicat' (front-end
>per mysql).. cmq ammetto che le prove di solito le faccio tutto
>mediante VS, ma perchè conosco ancora poco gli strumenti alternativi...
>tipo quello che hai detto tu, il SQL Server Management Studio...
>ho cercato per vedere se VS mi avesse fornito pure quello ma
>non c'è... c'è solo 'configuration tools' che non credo serva
>allo scopo...
Se hai la versione EXPRESS, scaricati da qui gli strumenti client di SQL Server 2005
http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en

altrimenti, prendi il cd di installazione del tuo SQL Server e installa i componenti client..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

l'ho già prelevato
adesso devo solo installare..

ho provato col debug ma mi segna la riga sqldataReader reader= comandosql.Execute reader();
e 'impossibile convertire il valore del parametro da string a int 32'

allora: nella textbox1 (che raccoglie il parametro per la ricerca su chiave primaria) c'è un RegularExpressionValidator con [0-9]{0,7} come mi suggeristi tu qc post fa (), quindi in teoria la ricerca dovrebbe aver esito anche se non scrivo nulla nella txtbox1... eppure l'errore è quello lì, ed è pure strano visto che le altre txtbox raccolgono solo delle stringhe, e che l'unica che accetta numeri è proprio la txtbox1... evidentemente devo per forza scrivergli qualcosa malgrado la query... cmq adesso installerò il ssmse e vediamo che dice lui...

cmq ti dirò che il debug non lo so usare benissimo, lo uso solo per vedere cosa segna, ma non lo uso appieno, tant'è vero che il watch non l'ho mai usato... (se non sbaglio il watch serve per tenere d'occhio alcune variabili in particolare, ma non lo so usare sebbene la sua utilità sia enorme...)
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>l'ho già prelevato
>adesso devo solo installare..
bene
>
>ho provato col debug ma mi segna la riga sqldataReader reader=
>comandosql.Execute reader();
>e 'impossibile convertire il valore del parametro da string a
>int 32'
Questo significa che cerchi di convertire (o il framework cerca di farlo implicitamente) una stringa non numerica verso un intero.
>
>allora: nella textbox1 (che raccoglie il parametro per la ricerca
>su chiave primaria) c'è un RegularExpressionValidator con [0-9]{0,7}
>come mi suggeristi tu qc post fa (), quindi in teoria la
>ricerca dovrebbe aver esito anche se non scrivo nulla nella txtbox1...
>eppure l'errore è quello lì, ed è pure strano visto che le altre
>txtbox raccolgono solo delle stringhe, e che l'unica che accetta
>numeri è proprio la txtbox1... evidentemente devo per forza scrivergli
>qualcosa malgrado la query... cmq adesso installerò il ssmse
>e vediamo che dice lui...
SSMS non ti risolverà nulla.. il problema sta nel tuo codice.
Ricordati che se il valore che passi a quella variabile che si aspetta int32 è "blank", spazio, textbox vuoto, avrai sempre errore..
Devi controllare a priori che se è vuoto passi ad esempio un -1, oppure un DBNull.Value nei parametri..
In poche parole, se tu non passi valori ai campi, devi gestire la cosa, passando null alla tua query..

>
>cmq ti dirò che il debug non lo so usare benissimo, lo uso solo
>per vedere cosa segna, ma non lo uso appieno, tant'è vero che
>il watch non l'ho mai usato... (se non sbaglio il watch serve
>per tenere d'occhio alcune variabili in particolare, ma non lo
>so usare sebbene la sua utilità sia enorme...)
la cosa più semplice da imparare è passare sopra alle variabili e starci un secondo.. avrai un utile tooltip.. che è un po' come una watch al volo..


Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

il problema lo hai compreso appieno: come faccio a passare null alla query mediante le textbox (preferibilmente lasciate vuote)?

la txtbox vuota è txtbox.text=string.empty.. e dovrei dirgli qcs del tipo:

if (txtbox.text=string.empty) allra imposta null

sì, ma come lo imposto il null?
in poche parole.. il null lo assegno a txtbox (txtbox=null) o a txtbox.text (txtbox.text=null)?
o a qc altra proprietà di txtbox o txtbox.text?
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>il problema lo hai compreso appieno: come faccio a passare null
>alla query mediante le textbox (preferibilmente lasciate vuote)?
io gestirei un valore di default come pseudo null..

Ad esempio il -1..

If String.IsNullOrEmpty(TuaTextBox.Text) Then ' passa al parametro il -1 oppure passo il parametro a DBNull.Value End If

Ovviamente poi nella query devi gestire il passaggio del -1 evitando in quel caso la ricerca.

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

cmq quell'errore non me lo dà più, ora devo sistemarmi le query per bene..

ti ringrazio ancora tanto x il tuo prezioso aiuto

alx_81 Profilo | Guru

>cmq quell'errore non me lo dà più, ora devo sistemarmi le query
>per bene..
>
>ti ringrazio ancora tanto x il tuo prezioso aiuto
è stato un piacere
Alx81 =)

http://blogs.dotnethell.it/suxstellino
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5