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.