• User Attivo

    Errore sui parametri

    Salve, non sono molto pratica con asp.net, ho qualche problema con un form.

    Vi posto il codice del form

    <formid="form1"runat="server">
    <div>
    &nbsp;<asp:FormViewID="FormView1"runat="server"DataSourceID="ObjectDataSource1"DefaultMode="Insert">
     
    <InsertItemTemplate>
    idRubrica:
    <asp:TextBoxID="idRubricaTextBox"runat="server"Text='<%# Bind("idRubrica") %>'>
    </asp:TextBox><br/>
    idUtente:
    <asp:TextBoxID="idUtenteTextBox"runat="server"Text='<%# Bind("idUtente") %>'>
    </asp:TextBox><br/>
    nomeAutore:
    <asp:TextBoxID="nomeAutoreTextBox"runat="server"Text='<%# Bind("nomeAutore") %>'>
    </asp:TextBox><br/>
    nomeRubrica:
    <asp:TextBoxID="nomeRubricaTextBox"runat="server"Text='<%# Bind("nomeRubrica") %>'>
    </asp:TextBox><br/>
    dataPubblicazione:
    <asp:TextBoxID="dataPubblicazioneTextBox"runat="server"Text='<%# Bind("dataPubblicazione") %>'>
    </asp:TextBox><br/>
    oraPubblicazione:
    <asp:TextBoxID="oraPubblicazioneTextBox"runat="server"Text='<%# Bind("oraPubblicazione") %>'>
    </asp:TextBox><br/>
    minutiPubblicazione:
    <asp:TextBoxID="minutiPubblicazioneTextBox"runat="server"Text='<%# Bind("minutiPubblicazione") %>'>
    </asp:TextBox><br/>
    qualificaAutore:
    <asp:TextBoxID="qualificaAutoreTextBox"runat="server"Text='<%# Bind("qualificaAutore") %>'>
    </asp:TextBox><br/>
    titoloArticolo:
    <asp:TextBoxID="titoloArticoloTextBox"runat="server"Text='<%# Bind("titoloArticolo") %>'>
    </asp:TextBox><br/>
    testo:
    <asp:TextBoxID="testoTextBox"runat="server"Text='<%# Bind("testo") %>'>
    </asp:TextBox><br/>
    link1:
    <asp:TextBoxID="link1TextBox"runat="server"Text='<%# Bind("link1") %>'>
    </asp:TextBox><br/>
    link2:
    <asp:TextBoxID="link2TextBox"runat="server"Text='<%# Bind("link2") %>'>
    </asp:TextBox><br/>
    testatina:
    <asp:TextBoxID="testatinaTextBox"runat="server"Text='<%# Bind("testatina") %>'>
    </asp:TextBox><br/>
    <asp:LinkButtonID="InsertButton"runat="server"CausesValidation="True"CommandName="Insert"
    Text="Inserisci">
    </asp:LinkButton>
    <asp:LinkButtonID="InsertCancelButton"runat="server"CausesValidation="False"CommandName="Cancel"
    Text="Annulla">
    </asp:LinkButton>
    </InsertItemTemplate>
     
    </asp:FormView>
    <asp:ObjectDataSourceID="ObjectDataSource1"runat="server"InsertMethod="Insert"
    OldValuesParameterFormatString="original_{0}"SelectMethod="GetData"TypeName="RubricheTableAdapters.RubricheTableAdapter">
    <InsertParameters>
    <asp:ParameterName="idRubrica"Type="Int64"/>
    <asp:ParameterName="idUtente"Type="Int64"/>
    <asp:ParameterName="dataPubblicazione"Type="String"/>
    <asp:ParameterName="oraPubblicazione"Type="String"/>
    <asp:ParameterName="minutiPubblicazione"Type="String"/>
    <asp:ParameterName="nomeAutore"Type="String"/>
    <asp:ParameterName="qualificaAutore"Type="String"/>
    <asp:ParameterName="titoloArticolo"Type="String"/>
    <asp:ParameterName="testo"Type="String"/>
    <asp:ParameterName="link1"Type="String"/>
    <asp:ParameterName="link2"Type="String"/>
    <asp:ParameterName="testatina"Type="String"/>
    </InsertParameters>
    </asp:ObjectDataSource>
     
    </div>
    </form>
    
    
    

    Questo il codice per la scrittura del database

    ALTER PROCEDURE dbo.Rubriche_Insert
    (
    @idUtente bigint,
    @dataPubblicazione nvarchar(50),
    @oraPubblicazione nvarchar(50),
    @minutiPubblicazione nvarchar(50),
    @nomeAutore nvarchar(50),
    @qualificaAutore nvarchar(50),
    @titoloArticolo nvarchar(50),
    @testo ntext,
    @link1 nvarchar(50),
    @link2 nvarchar(50),
    @testatina nvarchar(50)
    )
    AS
    SET NOCOUNT OFF;
    INSERT INTO Rubriche
    (idUtente, dataPubblicazione, oraPubblicazione, minutiPubblicazione,
    nomeAutore, qualificaAutore, titoloArticolo, testo, link1, 
    link2, testatina)
    VALUES (@idUtente,@dataPubblicazione,@oraPubblicazione,@minutiPubblicazione,
    @nomeAutore,@qualificaAutore,@titoloArticolo,@testo,
    @link1,@link2,@testatina)
    
    

    e questo l'errore che viene restituito

    Impossibile trovare un metodo non generico 'Insert' per ObjectDataSource 'ObjectDataSource1' che presenti parametri: idRubrica, idUtente, dataPubblicazione, oraPubblicazione, minutiPubblicazione, nomeAutore, qualificaAutore, titoloArticolo, testo, link1, link2, testatina, nomeRubrica.

    Sapreste dirmi cosa manca?


  • Super User

    Dove hai definito la funzione insert che fa l'inserimento? Dove lo hai scritto il codice sql?


  • User Attivo

    Il codice sql si trova dentro una stored procedure.
    Poi ho creato un table adapter che si richiama la procedura.
    E poi l'ho agganciato al objetdatasource.
    Ho fatto tutto con visual studio. Di mio non ho scritto una riga di codice (a parte quello sql per creare la SP) perché non sono molto pratica di c#


  • Super User

    La insert in SQL che hai tu non ha il parametro idRubrica, quindi lui vede una funzione diversa e non trova quella dove c'è anche idRubrica.


  • User Attivo

    Ok, il problema così è risolto.

    Ora ne sopraggiunge un altro, forse più grave....

    Per esigenze che non sto qui a spiegare devo lavorare nel seguente modo:
    creare una tabella
    creare stored procedure per insert, select, update;
    creare tabel adapters che richiamano le varie tabelle;
    creare i form view.

    E tutto funziona.

    Ma quando devo aggiungere nuovi campi alle tabelle e di conseguenza modificare le stored procedure, come devo fare?
    Io ho provato a fare le modifiche da direttamente sql ma quando lancio il form mi da i soliti errori che non trova i parametri.
    Come devo fare?


  • Super User

    Forse fai prima a cancellare la tabella e rifarla, oppure aggiungi i campi anche nel formview


  • User Attivo

    Addirittura cancellare tutta la tabella e rifarla?


  • Super User

    Non la tabella ma quella nella pagina aspx.


  • User Attivo

    L'ho rifatta millevolte, ma non cambia nulla


  • Super User

    devi riaggiornare anche il tableadapter


  • User

    ti conviene usare una gridview con una query che seleziona tutti i campi e con la proprietà AutoGenerateColumn impostato a True, così, utilizzando una query che ad esempio fa un SELECT * FROM tabella, la grid si crea a runtime la sua struttura su quella della tabella del db.


  • User Attivo

    Alla fine ho trovato il metodo.
    Vado a creare le Stored Procedure direttamente dal Table Adapter e le modifico direttamente da lì. Così non ci sono più problemi di parametri sbagliati