6 messaggi dal 04 agosto 2017
Salve,

ho la necessità di popolare una GridView con i dati anagrafici degli utenti (da un DB Oracle), in particolare il cognome può contenere l'apice.
Vorrei quindi sapere come posso sostituire l'apice singolo dal cognome, la prima cosa che ho provato è questa:

<asp:TemplateField HeaderText="COGNOME" SortExpression="COGNOME">
                <ItemTemplate>
                    <asp:Label ID="lblCognome" runat="server" Text='<%# Bind("COGNOME").Replace("'","''") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>


ma quando eseguo il codice ottengo l'errore "Il formato del tag server non è corretto."
Come posso fare?
Grazie, saluti.


Roberto
166 messaggi dal 09 febbraio 2017
Ciao,

se nel Database il cognome é di tipo varchar(presumo), dov é il problema ? Nel senso, prova prima a popolare la GridView senza replace o cose piú "complicate" .

Anche perché se separi l' apice dal cognome dove lo metti poi ? Non scriveresti i cognomi correttamente

Emanuel Pirovano
Web Developer
3.939 messaggi dal 28 gennaio 2003
sono stato preceduto ma confermo:
il codice di prova che ho usato funziona

<asp:Label ID="nome_provincia" runat="server" Text='<%# Bind("nome_provincia") %>'></asp:Label>

ho preso i dati delle province da una tabella oracle i cui nomi hanno apici, tipo
"Valle d'Aosta/Vallée d'Aoste"

il problema c'è invece se questo apice è dentro una funzione javascript, ma non in questo caso
6 messaggi dal 04 agosto 2017
Il campo cognome è di tipo varchar, l'apice non è che lo elimino ma in altre situazioni (vedi programmi Win32) ho sempre utilizzato il "Replace("'", "''")" per forzare la query a salvare l'apice.
In questo caso l'errore si verifica nel GridView.DataBind() (subito dopo il salvataggio dei dati sul DB) e l'errore che Oracle ritorna è "ORA-01756: quoted string not properly terminated" probabilmente perchè tra i dati da caricare, appunto, compare un cognome con l'accento.
Considerate che il programma non l'ho scritto io ma è stato sviluppato da altri che non se ne possono più occupare quindi io, ora, devo risolvere questa rognetta.
Se lo avessi fatto io avrei gestito tutto via "codebehind", in effetti sto valutando di riscrivere tutta la parte che attualmente è "inline" e portarla "codebehind" per poterla gestire meglio.
Però, se ci fosse modo di risolvere questa cosa senza sconvolgere il codice sarebbe meglio.
Grazie, saluti.


Roberto
Modificato da washburn il 07 agosto 2017 09.38 -
Modificato da washburn il 07 agosto 2017 09.40 -
Modificato da washburn il 07 agosto 2017 10.17 -
6 messaggi dal 04 agosto 2017
Alla fine ho trovato...l'errore era nella query che veniva passata al datasource assegnato alla griglia.
La "select" eseguiva un "where cognome like", veniva passato il cognome con l'apice e giustamente Oracle tuonava.
E' bastato aggiungere alla stringa che contiene il cognome "Replace("'", "''")" e l'errore è andato a posto.
Grazie comunque per i suggerimenti.
Saluti,


Roberto
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Roberto,
come hanno detto anche gli altri, non è necessario alcun replace, da nessuna parte.


Oracle ritorna è "ORA-01756: quoted string not properly terminated

Questo può succedere solo se componi tu la query di aggiornamento a mano. Fai vedere il codice che usi per aggiornare il db.

Dovresti usare il provider di Oracle e passare il valore con un OracleParameter, così sarà il provider stesso a comporre opportunamente la query in modo che l'apice non causi problemi.

Ecco un esempio di come eseguire una UPDATE passando i valori come parametri.
https://stackoverflow.com/questions/5765962/how-to-execute-a-update-statement-using-oracle-odp-net-in-c-sharp

Ed ecco come usare i parametri con una like
https://stackoverflow.com/questions/3790424/usage-of-oracle-binding-variables-with-like-in-c-sharp



E' bastato aggiungere alla stringa che contiene il cognome "Replace("'", "''")" e l'errore è andato a posto.

Sono sicuro che funziona ma se non usi i parametri sei aperto alla SQL Injection, che è un pericolo immane per i tuoi dati.


ciao,
Moreno
Modificato da BrightSoul il 07 agosto 2017 13.15 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.