SQL UPDATE SU ORACLE

giovedì 30 luglio 2009 - 14.36

sorigrafia Profilo | Junior Member

Ciao a tutti...
riprendo un problema che ho e del quale già se parlò su questo thread...senza però trovare soluzioni:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=17866

In pratica io ho il mio oggetto SQLDatasource associato ad una WebGrid (componente simile alla DataGrid):
<asp:SqlDataSource
ID="XE" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionStringOracle %>"
ProviderName="<%$ ConnectionStrings:ConnectionStringOracle.ProviderName %>"
SelectCommand='SELECT * FROM "CARICO192_168_1_221"'
UpdateCommand="UPDATE CARICO192_168_1_221 SET DIETA = @DIETA">
</asp:SqlDataSource>

e dal WebGrid_UpdatingCommand:
XE.UpdateCommand = "UPDATE CARICO192_168_1_221 SET" & _
" COGNOME = '" & COGNOME & "'," & _
" DIETA = '" & DIETA & "'," & _
" where SEQUENZA ='" & Session("ItemInfo") & "'"
XE.Update()
C1WebGrid1.DataBind()

Quando vado in editing e dopo in updating per aggiornare mi succede che:
l' aggiornamento viene eseguito e i dati scritti: l' Update viene eseguito, il Databind anche ma quando la pagina si deve riaggiornare mi appare l' errore:

"ORA-01036: Nome o numero di variabili non ammesso"

Le ho provate tutte, leggendo in vari forum: cambiare @ con :, togliere, mettere....ma niente.
Mi sapreste aiutare??
Grazie mille


Aggiungo stringa SQL generata:
"UPDATE CARICO192_168_1_221 SET COGNOME = 'LUCA', DIETA = 'COMUNE DEGENTI' where SEQUENZA ='001'"
che, dato che nel database aggiorna, presumo sia corretta....

AirLainz

alx_81 Profilo | Guru

>Ciao a tutti...
ciao

>Aggiungo stringa SQL generata:
>"UPDATE CARICO192_168_1_221 SET COGNOME = 'LUCA', DIETA = 'COMUNE
>DEGENTI' where SEQUENZA ='001'"
>che, dato che nel database aggiorna, presumo sia corretta....
ma scusa dove definisci i parametri del sqldatasource?
Tu stai definendo solo il comando coi placeholder dei parametri, ma poi ogni parametro va definito nella sezione <SelectParameters> e <UpdateParameters> come indicato qui:
http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.sqldatasource.aspx
leggi il link attentamente e ti accorgerai che non devi andare a creare tu i comandi, fa tutto da solo in base a come è composta la griglia.

--

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

sorigrafia Profilo | Junior Member

Ciao alx_81...intanto ti rigrazio per le risp.
Al momento ho aggiunto l' <UpdateParameters> solo del COGNOME perchè voglio provare che prima l' update funzioni con solo un campo e ho questo codice:

asp:
<asp:SqlDataSource
ID="XE" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionStringOracle %>"
ProviderName="<%$ ConnectionStrings:ConnectionStringOracle.ProviderName %>"
SelectCommand='SELECT * FROM "CARICO192_168_1_221"'
UpdateCommand="UPDATE CARICO192_168_1_221 SET COGNOME = :COGNOME" >
<UpdateParameters>
<asp:ControlParameter Name="COGNOME" ControlId="C1WebGrid1:txtCognome" PropertyName="Text"/>
</UpdateParameters>
</asp:SqlDataSource>

vb:
XE.UpdateCommand = "UPDATE CARICO192_168_1_221 SET COGNOME = :" & COGNOME
XE.Update()

Il problema è che ora ho il seguente errore:
"impossibile trovare il controllo "C1WebGrid1:txtCognome" in controlparameter "COGNOME"
Ho provato a metterlo dentro la mia C1webgrid, a tenerlo fuori, a metterlo dentro dal form ma mi appare sempre.
Poi ho trovato un thread
"http://blogs.aspitalia.com/az/post1892/ControlParameter-Masterpage.-Bug.aspx"
che dice che potrtebbe essere un bug la causa.
E' cos' o continuo io a sbagliare?
Del Select non ho parametri in lettura da settare...li devo selezionare tutti xke tutti mi servono ma ne visualizzo solo alcuni.
Devo ugualmente fare il <SelectParameters> di tutti i campi? O solo di quelli che visualizzo?

ciao e grazie

AirLainz

alx_81 Profilo | Guru

>E' cos' o continuo io a sbagliare?
Io metterei la @ lo stesso perchè è il placeholder interno.
Poi con l'id del controllo, si intende l'id lato server quindi SOLO txtCognome.

>Del Select non ho parametri in lettura da settare...li devo selezionare
>tutti xke tutti mi servono ma ne visualizzo solo alcuni. Devo ugualmente fare il <SelectParameters> di tutti i campi?
>O solo di quelli che visualizzo?
se è una select all, non devi definire alcun parametro

--

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

sorigrafia Profilo | Junior Member

Modificato cosi ma stesso errore:

<asp:SqlDataSource
ID="XE" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionStringOracle %>"
ProviderName="<%$ ConnectionStrings:ConnectionStringOracle.ProviderName %>"
SelectCommand='SELECT * FROM "CARICO192_168_1_221"'
UpdateCommand="UPDATE CARICO192_168_1_221 SET COGNOME = @COGNOME" >
<UpdateParameters>
<asp:ControlParameter Name="COGNOME" ControlId="txtCognome" PropertyName="Text"/>
</UpdateParameters>
</asp:SqlDataSource>

Cosa posso provare?
Grazie e ciao
AirLainz

alx_81 Profilo | Guru

>Modificato cosi ma stesso errore:
>
> <asp:SqlDataSource
> ID="XE" runat="server"
>ConnectionString="<%$ ConnectionStrings:ConnectionStringOracle
>%>"
>ProviderName="<%$ ConnectionStrings:ConnectionStringOracle.ProviderName
>%>"
>SelectCommand='SELECT * FROM "CARICO192_168_1_221"'
>UpdateCommand="UPDATE CARICO192_168_1_221 SET COGNOME = @COGNOME"
>>
> <UpdateParameters>
><asp:ControlParameter Name="COGNOME" ControlId="txtCognome"
>PropertyName="Text"/>
> </UpdateParameters>
> </asp:SqlDataSource>
>
>Cosa posso provare?
tu hai masterpages? oppure è una semplice pagina aspx?

--

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

sorigrafia Profilo | Junior Member

semplice pagina aspx da visual studio 2005.
Se ti puo essere utile ho installato oracle 11g ma il database è in versione oracleXE...
AirLainz

alx_81 Profilo | Guru

>semplice pagina aspx da visual studio 2005.
allora il link di aspitalia non ti serve perchè parla di master pages.

>Se ti puo essere utile ho installato oracle 11g ma il database è in versione oracleXE...
mi potresti passare tutto l'aspx? replico su sql server.

Un'altra cosa, la select, elimina quei doppi apici e usali come hai fatto per l'update


--

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

sorigrafia Profilo | Junior Member

mi potresti passare tutto l'aspx?
ECCOLO
replico su sql server
??
grazie mille

AirLainz

alx_81 Profilo | Guru

>replico su sql server??
Ho fatto un esempio con sql..
Ma prima ho fatto caso che il tuo controllo è all'interno della WebGrid. Che io sappia non puoi passare il nome del controllo se esso è "ripetuto" all'interno di un'altro controllo.
Devi usare la normale collezione dei parametri, ed iniettare il valore nell'evento UPDATING della tua griglia..

> grazie mille
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

sorigrafia Profilo | Junior Member

Ciao...scusa ma sono stato in vacanza e riprendo il tutto ora..

"Devi usare la normale collezione dei parametri, ed iniettare il valore nell'evento UPDATING della tua griglia.."
Cosa intendi?
Io ho il mio evento ....
"Protected Sub C1WebGrid1_UpdatingCommand(ByVal sender As Object, ByVal e As C1.Web.C1WebGrid.C1UpdatingEventArgs) Handles C1WebGrid1.UpdatingCommand"

....al cui interno ho provato a mettere i miei parametri...
'XE.UpdateParameters.Add("@COGNOME", TypeCode.String, COGNOME)
'XE.UpdateCommand = "UPDATE CARICO192_168_1_221 SET COGNOME = '" & COGNOME & "'"
XE.Update()
C1WebGrid1.DataBind()

ma niente...stesso problema.
Intendi questo per "normale collezione dei parametri, ed iniettare il valore nell'evento UPDATING della tua griglia"??
L' unico modo per fargli scrivere i dati era come impostato inizialmente, senza updateparameters ma con poi l' errore "ORA-01036"..

Vuoi che ti passi altro?

Grazie mille



--

AirLainz

alx_81 Profilo | Guru

per evento updating intendo questo:
http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.sqldatasource.updating.aspx

>....al cui interno ho provato a mettere i miei parametri...
>'XE.UpdateParameters.Add("@COGNOME", TypeCode.String, COGNOME)
>ma niente...stesso problema.
Ma se il parametro è già sul sqldatasource, non devi fare la add, ma piuttosto accedere al parametro che già hai, cambiando il defaultvalue.
accedi con:
XE.UpdateParameters("@COGNOME").DefaultValue = COGNOME
--

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

sorigrafia Profilo | Junior Member

Ciao...
ho guardato il link che mi hai mandato
http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.sqldatasource.updating.aspx
e anche questo per l' update con gridview, dato che io uso la WebGrid della ComponentOne che è simile...
http://msdn.microsoft.com/en-us/library/ms972948%28printer%29.aspx

Ho provato anche ad utilizzare
XE.UpdateParameters("@COGNOME").DefaultValue = COGNOME

ma niente...l' errore mi si presenta sempre quando deve eseguire l' update del datasource (XE.Update).
Secondo me (scusami se mi son permesso, è come se un allenatore dilettantistico dicesse il suo parere ad Ancelotti....) il problema è negli <UpdateParameters>

Se metto <asp:Parameter> come indicato in certi siti
<UpdateParameters>
<asp:Parameter Type="String" Name="COGNOME">
</UpdateParameters>
ottengo l' errore "ORA-01036: Nome o numero di variabili non ammesso"

altrimenti con <asp:ControlParameter>:
<UpdateParameters>
<asp:ControlParameter Name="COGNOME" ControlId="txtCognome" PropertyName="Text"/>
</UpdateParameters>
ottengo: "impossibile trovare il controllo "C1WebGrid1:txtCognome" in controlparameter "COGNOME"

Ho provato anche a sostituire ControlId="txtCognome" con ControlId="C1WebGrid1" ma poi ho problemi nel settargli il PropertyName. Ho provato con PropertyName="Text" / "COGNOME" ma niente.

Il problema me lo da sempre con XE.Update e l' eccezione è: "Eccezione first-chance di tipo 'System.Web.HttpException' in System.Web.dll"

Non è che sia un problema di .dll che utilizzo?
Non so più dove sbattere la testa, son riuscito a fare tutto e mi manca solo questo dannato UPDATE con ORACLE per finire...!!!

Grazie per la pazienza e gli aiuti...

--

AirLainz

sorigrafia Profilo | Junior Member

sto provando a disinstallare oracle XE e oracle 11g che utilizzavo...non vorrei andassero in conflitto...potrebbe essere dato da questo il problema?

Ora provo solo con oracle database 10g...tu cosa consiglieresti di utilizzare?

Ciao e grazie mille come sempre
--

AirLainz

alx_81 Profilo | Guru

>sto provando a disinstallare oracle XE e oracle 11g che utilizzavo...non
>vorrei andassero in conflitto...potrebbe essere dato da questo
>il problema?
Purtroppo oracle non lo conosco. Mi sembra strano, perchè con SQL Server non ho avuto nessun problema..

>Ora provo solo con oracle database 10g...tu cosa consiglieresti
>di utilizzare?
ehehe.. io sono di parte, ORACLE lo userei solo se l'ambiente è enterprise.. in altri casi, SQL Server è assolutamente più che sufficiente (anch'esso regge degli ambienti di produzione veramente spinti, non sottovalutarlo ).
--

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

sorigrafia Profilo | Junior Member


>Purtroppo oracle non lo conosco. Mi sembra strano, perchè con SQL Server non ho avuto nessun problema..
Infatti anche a me dopo un pò è venuto il dubbio che fosse qualcosa non legato al codice...vedremo, ti faccio sapere.

>ehehe.. io sono di parte, ORACLE lo userei solo se l'ambiente è enterprise.. in altri casi, SQL Server è assolutamente più che >sufficiente (anch'esso regge degli ambienti di produzione veramente spinti, non sottovalutarlo ).
Purtroppo questo sarebbe una nuova applicazione ma su qualcosa già fatto in vb6 con ORACLE, quindi non mi posso muovere da certe cose di base.

Per ora grazie mille, sei davvero gentile e paziente.
Ciao


--

AirLainz

sorigrafia Profilo | Junior Member

Ciao...nessuna soluzione...sempre errore ORA-01036.
Il bello è che se non imposto e tolgo <UpdateParameters> mi da l' errore ma mi aggiorna e da SQL in manuale funziona bene!

Non ruiscite voi a fare prove su ORACLE? Sai altrimenti a chi posso rivolgermi?
Non so più cosa provare..

Ciao



--

AirLainz

alx_81 Profilo | Guru

>Ciao...nessuna soluzione...sempre errore ORA-01036.
>Il bello è che se non imposto e tolgo <UpdateParameters>
>mi da l' errore ma mi aggiorna e da SQL in manuale funziona bene!
>
>Non ruiscite voi a fare prove su ORACLE? Sai altrimenti a chi
>posso rivolgermi?
l'unico post che si avvicina al tuo cercando un po' è questo:
http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/2690f60c-170b-4ba3-be82-a150ff46c8ff/

Leggendolo capirai che l'update funziona sicuramente .
Quindi il problema sta nel fatto che o non valorizzi correttamente o non usi le sintassi giuste..
di più proprio non saprei che dirti.
--

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

sorigrafia Profilo | Junior Member

>l'unico post che si avvicina al tuo cercando un po' è questo:
>http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/2690f60c-170b-4ba3-be82-a150ff46c8ff/

ciao ho fatto come nel post...da codice vb aggiorna ma l' errore me lo trovo sempre quando termina il codice in vb e deve riaggiornare la pagina...l' update funziona perche quando riavvio mi trovo i dati modificati...

Adesso provo a vedere se il problema puo essere nella select che rifa quando deve rileggere la pagina


--

AirLainz

sorigrafia Profilo | Junior Member

Ho trovato una scappatoia...
Dato che riesco ad aggiornare da codice ho fatto una funzione che mi aggiorna e poi resetta la modalità di modifica della mia gridview...per il momento funziona anche se non è il percorso che dovrebbe seguire con i comandi di Update da pagina aspx...
Se dovessi avere novità, scrivo anche per altri.
--

AirLainz
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5