Filtro su stringa con spazi iniziali (Oracle)

lunedì 05 gennaio 2009 - 00.25

pigi78 Profilo | Newbie

Salve.

Ho una tabella il cui campo chiave è di tipo "CHAR(10)".
Una delle chiavi ha il valore ' 1801', ovvero 6 spazi seguiti da 1801.

Eseguendo la seguente query da sql-plus tutto va bene:

SELECT id FROM tabella WHERE id = ' 1801'


Se però provo ad accederci mediante C# usando i parametri, questa non funziona.
In altre parole ho la query:

SELECT id FROM tabella WHERE id = :id

e poi valorizzo il parametro ID col valore ' 1801', però non vengono estratte righe dal database.
Se inserisco nel database un id pari a '1801 ' (ovvero sposto gli spazi in fondo), la query fatta da C# mi restituisce questo articolo. Pertanto suppongo che il problema sia che i parametri con gli spazi iniziali hanno dei problemi.


Qualcuno sa come posso risolvere il problema?
Grazie!


PS: Ho postato qui perchè è un problema di accesso ai dati, anche se non è un errore di Oracle (almeno credo. In fondo se il problema è nel connettore, visto che è fornito da Oracle non posso dire che è colpa del .NET :-D)

alx_81 Profilo | Guru

>Salve.
Ciao!

>Se però provo ad accederci mediante C# usando i parametri, questa
>non funziona. In altre parole ho la query:
>
>SELECT id FROM tabella WHERE id = :id
>
>e poi valorizzo il parametro ID col valore ' 1801', però non vengono estratte righe dal database.

>Qualcuno sa come posso risolvere il problema?
Potresti postare il codice o dirci il metodo che usi per fare la query e come passi i valori? Senza quello è dura capire il problema.
Se si comporta come sql server, è molto probabile che ci sia un errore nel codice.. perchè il parametro non viene trimmato se passi gli spazi, ovunque essi siano (inizio o fine).
Gli spazi sono sempre caratteri e credo che Oracle non dia alcun problema. E' più probabile che ci sia qualcosa di strano nel codice.

>Grazie!
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

lbenaglia Profilo | Guru

>Ho una tabella il cui campo chiave è di tipo "CHAR(10)".
>Una delle chiavi ha il valore ' 1801', ovvero 6 spazi seguiti
>da 1801.
>
>Eseguendo la seguente query da sql-plus tutto va bene:
>
>SELECT id FROM tabella WHERE id = ' 1801'

Perché utilizzi il data type CHAR (stringhe a lunghezza fissa) per memorizzare valori numerici?
Non sarebbe più indicato un INTEGER (o un NUMBER con precision e scale in base alle tue esigenze)?
Nel caso debba memorizzare sia stringhe che numeri di lunghezza variabile, hai valutato il data type VARCHAR2?

>Grazie!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

pigi78 Profilo | Newbie

Grazie ad entrambi per l' aiuto!

Per fortuna sono riuscito a trovare il problema.
Specifico che sto lavorando con i Data Access Application Block, quindi non uso direttamente i driver di Oracle.
Però, nel fare un esempio con Oracle (prima di postare il problema), avevo usato il DbType.Varchar, anzichè DbType.Char... Quindi forse è il Varchar che mi toglie gli spazi iniziali.

Lo stesso errore lo avevo fatto con gli Application Block: anzichè usare il tipo "StringFixedLength" usavo il tipo "String"...

Ora funziona tutto.
Grazie comunque (mi sono accordo del problema quando ho fatto il copia/incolla del codice per postarlo sul forum!)
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