19 messaggi dal 15 gennaio 2004
www.f4w.it


Ciao a tutti.

Sto studiando un po' il controllo GridView che poggia sull'SqlDataSource.

Ho approntato una pagina asp net di prova in cui inserisco i miei due controlli.

Sto provando a usare il gridView anche per Updating e Deleting.

Ma sembra che in entrambe i casi nella query SQL inviata al parser del database non venga risolta la sostituzione dei parametri.

Come posso verificare quale query viene inviata realmente al DB?
Come mai non vengono sostituiti i parametri con i valori inseriti nel form che il controllo crea nella pagina web?
Sbaglio evidentemente qualcosa nell'impostazione del controllo.

Allego il codice di mark up (solo un estratto relativo all'inizializzazione dei 2 controlli in questione):

<asp:GridView ID="GdvGenerica" DataSourceID="DSGenerico" runat="server" AutoGenerateColumns="false" AllowPaging="true" 
    AllowSorting="true" PageSize="5" AutoGenerateDeleteButton ="true" AutoGenerateEditButton ="true" DataKeyNames="TB51_PRG_FICHIER" >
        <PagerSettings FirstPageText="Top" Mode="NumericFirstLast" LastPageText="Bottom"  PageButtonCount="10" />
        <Columns>
            <asp:BoundField HeaderText="Progr." DataField="TB51_PRG_FICHIER" ReadOnly="true" SortExpression="TB51_PRG_FICHIER" />
            <asp:BoundField HeaderText="Stato" DataField="TB51_STATO" SortExpression="TB51_STATO" />
            <asp:BoundField HeaderText="Data rif." DataField="DATEDECL" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="DSGenerico" runat="server" DataSourceMode="DataSet" />


e il code behing relativo in VB:

Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        configDataSource()

    End Sub

    Private Sub configDataSource()
        ' Get the connectionStrings.
        DSGenerico.ConnectionString = ConfigurationManager.ConnectionStrings.Item(1).ConnectionString   
        DSGenerico.ProviderName = ConfigurationManager.ConnectionStrings.Item(1).ProviderName

        DSGenerico.SelectCommand = "Select * from gpfctb51 order by TB51_PRG_FICHIER"
        DSGenerico.UpdateCommand = "update gpfctb51 set TB51_STATO = @TB51_STATO, DATEDECL = @DATEDECL where TB51_PRG_FICHIER = @TB51_PRG_FICHIER"
        DSGenerico.DeleteCommand = "delete from gpfctb51 where TB51_PRG_FICHIER = @TB51_PRG_FICHIER"

    End Sub

End Class





L'errore che mi viene dato e:


ERROR [42000] [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0113 - Nome @TB51_STATO non consentito.


Che praticamente, come dicevo sopra, è il parser SQL di DB2 che si trova nella query il valore '@TB51_STATO' e ovviamente se la prende...

Cosa posso fare?

Grazie.


Fedroz
----------------------
Corso di Shiatsu a Brescia?
http://www.f4w.it/eldaconti
non vorrei sbagliarmi ma ODBC non usava un altro carattere per specificare un parametro?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
19 messaggi dal 15 gennaio 2004
www.f4w.it
nostromo ha scritto:
non vorrei sbagliarmi ma ODBC non usava un altro carattere per specificare un parametro?

ciao marco


Caspita!
Hai proprio ragione...
Ho verificato e nel caso dei provider ODBC e OleDb si usa il carattere '?' anzichè '@'.

Grazie per la segnalazione.
Stavo impazzendo...


Fedroz
----------------------
Corso di Shiatsu a Brescia?
http://www.f4w.it/eldaconti
di nulla :)

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
19 messaggi dal 15 gennaio 2004
www.f4w.it
Fedroz ha scritto:

Come posso verificare quale query viene inviata realmente al DB?



In effetti sostituito il '@' con '?' l'errore è cambiato.
Si tratta ancora di un problema di SQL.

Come posso vedere la query che viene inviata al parser SQL per capire/debuggare il problema?

Esiste un modo?

Grazie.


Fedroz
----------------------
Corso di Shiatsu a Brescia?
http://www.f4w.it/eldaconti
in teoria la query è quella sono on i parametri sostituiti con i loro valori.

con Sql Sever sarebbe facile ma con il db che stai usando non saprei

ciao marco

p.s che errore ricevi adesso?

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
19 messaggi dal 15 gennaio 2004
www.f4w.it
Ciao.

Ecco l'errore in update:

Exception Details: System.Data.Odbc.OdbcException: ERROR [42000] [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0104 - Token TB51_STATO non valido. Token validi: <FINE-ISTRUZIONI>.



Questo invece è quanto accade in deleting:

Exception Details: System.Data.Odbc.OdbcException: ERROR [42000] [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0104 - Token TB51_PRG_FICHIER non valido. Token validi: <FINE-ISTRUZIONI>.





Ma si tratta di un errore abbastanza generico...

Fedroz
----------------------
Corso di Shiatsu a Brescia?
http://www.f4w.it/eldaconti

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.