11 messaggi dal 18 marzo 2011
Ciao a tutti.

Devo dire che sono piacevolmente sorpreso dalla potenza di ASP.Net 4, ho fatto diversi passi avanti, ma sono bloccato sulla modalità di update dei dati della tabella.

Il mio testo di riferimento è «ASP.NET 4 in C# e VB», autori Bill Evjen, Scott Hanselman, Devin Rader.

Ricevo il seguente errore ed i records nella tabella non si modificano:
An error occurred while attempting to update the row.

Perchè?

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Odbc" %>
<%@ Import Namespace="System.Configuration" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

public void Page_Load (Object sender, EventArgs e)
{
    OdbcConnection myConnectionString = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString);
    myConnectionString.Open();    
    myConnectionString.Close();     
 }

protected void GridView1_RowUpdated(Object sender, GridViewUpdatedEventArgs e)
{

    if (e.Exception == null)
    {
        Message.Text = "Row updated successfully.";
   
    }
    else
    {
        e.ExceptionHandled = true;
        Message.Text = "An error occurred while attempting to update the row.";
    
    }

}



</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>

<form id="form1" runat="server">
<div>

<asp:label id="Message" forecolor="Red" runat="server"/>

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnMySQL %>" 
    ProviderName="<%$ ConnectionStrings:ConnMySQL.ProviderName %>" 
    DataSourceMode="DataSet"
    SelectCommand="SELECT * FROM tbl_login" 
    UpdateCommand="UPDATE tbl_login SET nome=@nome, cognome=@cognome WHERE ID=@original_ID">

<UpdateParameters>
<asp:Parameter Type="String" Name="nome" />
<asp:Parameter Type="String" Name="cognome" />
</UpdateParameters>

</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AllowSorting="True" PageSize="20" DataSourceID="SqlDataSource1" 
    DataKeyNames="ID" AutoGenerateColumns="False" AutoGenerateEditButton="False"
    onrowupdated="GridView1_RowUpdated">
    
<PagerStyle HorizontalAlign="Left" />

    <Columns>

    <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="true" />
    <asp:BoundField DataField="Email" HeaderText="Email" HtmlEncode="False" DataFormatString="<a href='mailto:{0}'>{0}</a>" />
    <asp:BoundField DataField="nome" HeaderText="nome" />
    <asp:BoundField DataField="cognome" HeaderText="cognome" />
    <asp:CommandField ShowHeader="true" HeaderText="Modifica" ShowEditButton="true" />

        <asp:TemplateField>        
            <ItemTemplate>
            </ItemTemplate>                
        </asp:TemplateField>

    </Columns>

<PagerSettings Position="TopAndBottom"
 FirstPageText="Prima pagina"
 LastPageText="Ultima pagina"
 Mode="NextPreviousFirstLast" />
<PagerSettings />

</asp:GridView>


</div>
</form>

</body>
</html>

Modificato da orcim il 18 marzo 2011 15.45 -
Modificato da orcim il 18 marzo 2011 16.20 -
710 messaggi dal 13 novembre 2008
Contributi
ricevi quell'errore perchè, in caso di errore nell'update della grid, gli dici di scrivere quell'errore.....

...
else
{
e.ExceptionHandled = true;
Message.Text = "An error occurred while attempting to update the row.";

}

per avere una idea di quale sia l'errore fai così

...
e.ExceptionHandled = true;

Message.Text = e.Exception.Message;
...
// per avere maggiori info puoi anche usare
//e.Exception.Source
//e.Exception.StackTrace;

così a spanne ti manca un parametro

UpdateCommand="UPDATE tbl_login SET nome=@nome, cognome=@cognome WHERE ID=@original_ID">
11 messaggi dal 18 marzo 2011
Grazie per aver risposto.
Ho eseguito le modifiche da te suggerite al codice (ho anche scoperto che con MySQL la "@" va sostituita con "?") e questo è l'errore:
ERROR [42000] [MySQL][ODBC 5.1 Driver]
[mysqld-5.1.44-community]
You have an error in your SQL syntax; 
check the manual that corresponds to 
your MySQL server version for the right 
syntax to use near 'nome, cognome='pippia'
cognome WHERE ID='xxxx@libero.it'ID' at line 1 


Sembra che il codice non veda il valore "nome" da aggiornare e fa slittare in avanti la query... infatti non trovo l'update del campo "nome", nel campo "cognome" mi ritrovo il valore giusto del cognome aggiornato, ma nell'ID mi ritrovo il valore dell'email....

Cosa mi sfugge?

Grazie mille
Modificato da orcim il 20 marzo 2011 23.20 -
Modificato da orcim il 20 marzo 2011 23.25 -
710 messaggi dal 13 novembre 2008
Contributi
quindi usi mySql

for the right
syntax to use near 'nome, cognome='pippia'
cognome WHERE ID='xxxx@libero.it'ID'


è evidenti che la query non è scritta correttamente

allora prova una cosa del genere

UPDATE tbl_login SET nome=?, cognome=?, email=? WHERE ID=?

come ti dicevo devi indicargli tutti i parametri sotto <UpdateParameters>, e dato che usi mySql inserire i segnaposti con ? come sopra
11 messaggi dal 18 marzo 2011
teo prome ha scritto:
quindi usi mySql

for the right
syntax to use near 'nome, cognome='pippia'
cognome WHERE ID='xxxx@libero.it'ID'


è evidenti che la query non è scritta correttamente

allora prova una cosa del genere

UPDATE tbl_login SET nome=?, cognome=?, email=? WHERE ID=?

come ti dicevo devi indicargli tutti i parametri sotto <UpdateParameters>, e dato che usi mySql inserire i segnaposti con ? come sopra


Grazie mille, con le ultime modifiche adesso riesco ad estrarre ed eliminare i records ma non riesco ad aggiornarli (ho semplificato la query per non complicarci troppo la vita).

Ecco la parte di codice interessata:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnMySQL %>" 
    ProviderName="<%$ ConnectionStrings:ConnMySQL.ProviderName %>" 
    DataSourceMode="DataSet"
    SelectCommand="SELECT * FROM _fmbtlam_copy" 
    UpdateCommand="UPDATE _fmbtlam_copy SET email=? WHERE ID=?"
    DeleteCommand="DELETE FROM _fmbtlam_copy WHERE ID=?">

<UpdateParameters>
<asp:Parameter Name="email" Type="String" Direction="Input" />
</UpdateParameters>

<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" Direction="Input" />
</DeleteParameters>

</asp:SqlDataSource>
manca l'id tra gli updateparameters

Ormai programmano tutti... ma la professionalità appartiene a pochi
11 messaggi dal 18 marzo 2011
manuel0081 ha scritto:
manca l'id tra gli updateparameters


Grazie, ma nemmeno così prende l'aggiornamento:

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:ConnMySQL %>" 
    ProviderName="<%$ ConnectionStrings:ConnMySQL.ProviderName %>" 
    DataSourceMode="DataSet"
    SelectCommand="SELECT * FROM _fmbtlam_copy" 
    UpdateCommand="UPDATE _fmbtlam_copy SET email=? WHERE ID=?"
    DeleteCommand="DELETE FROM _fmbtlam_copy WHERE ID=?">

<UpdateParameters>
<asp:Parameter Name="ID" Type="Int32" Direction="Input" />
<asp:Parameter Name="email" Type="String" Direction="Input" />
</UpdateParameters>

<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" Direction="Input" />
</DeleteParameters>

</asp:SqlDataSource>
710 messaggi dal 13 novembre 2008
Contributi
no panic

si certo gli metti il parameter ID, ma cosa prende visto che in realtà non editi ID?

DataKeyNames="ID"

http://www.aspitalia.com/script/671/GridView-AccessDataSource-Accesso-Dati-ASP.NET-2.0.aspx

che poi è stessa cosa

http://msdn.microsoft.com/en-us/library/ms972948.aspx

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.