Sintassi per le StoredProcedure per il controllo SqlDataSource

giovedì 17 agosto 2006 - 21.55

Giovanni_3478 Profilo | Senior Member

ciao

Non so se questa è la sezione adatta per questo post

Ho inserito nella aspx un controllo gridview e un controllo Sqldatasource.

Ho impostato la proprietà della gridview AutoGenerateEventButton a true.

Ora dovrei impostare la proprietà deleteCommand dell'SqlDataSource.

Il mio scopo è quello di dare la possibilità al controllo gridview di eliminare solo un record alla volta.

Ho letto sulla documentazione di MsSql:

[quote]
Le operazioni di eliminazione possono essere di due diversi tipi in base al contenuto della clausola WHERE:

Le eliminazioni con ricerca specificano una condizione di ricerca che qualifica le righe da eliminare. Ad esempio, WHERE column_name = value.


Le eliminazioni posizionate utilizzano la clausola CURRENT OF per specificare un cursore. L'operazione di eliminazione viene eseguita nella posizione corrente del cursore. Questo tipo di eliminazione risulta più accurato rispetto a un'istruzione DELETE con ricerca che utilizza una clausola WHERE search_condition per qualificare le righe da eliminare. Un'istruzione DELETE con ricerca elimina più righe se la condizione di ricerca non identifica una singola riga in modo univoco.
[/quote]

Ho provato quindi ad applicare questo esempio con i dovuti cambiamenti:

USE AdventureWorks;
GO
DECLARE complex_cursor CURSOR FOR
SELECT a.EmployeeID
FROM HumanResources.EmployeePayHistory AS a
WHERE RateChangeDate <>
(SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS b
WHERE a.EmployeeID = b.EmployeeID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO

Ho provato a digitare questo codice nel wizard relativo al controllo SqlDataSource
nel passaggio relativo alla stored procedure Delete e
quando vado ad eseguire la query
appare un messaggio:
Il costrutto o l'istruzione SQL USE nomeDB non è supportato.

Ho provato ad eliminare
USE AdventureWorks;
GO
ma appare:
"Il costrutto o l'istruzione SQL Dichiara cursore non è supportato."
e così via....


Come devo procedere per ottenere come risultato quello di poter eliminare una riga alla volta dal controllo gridview?




alx_81 Profilo | Guru

Ciao!
Direi innanzitutto di non crearti problemi inutili col cursore..
Credimi, è tutto molto più semplice..
Ammettiamo che tu abbia un gridview con all'interno un resultset dato da

"select id_cliente,nome, indirizzo from Clienti"

dove la definizione della tabella è

create table Clienti (id_Cliente int identity(1,1) primary key, nome varchar(100), indirizzo varchar(255) ) insert Clienti select 'Alessandro', 'Via Roma 10' insert Clienti select 'Andrea', 'Via Belvedere 5' insert Clienti select 'Alessia', 'Via Venezia 20' insert Clienti select 'Francesco', 'Via Roma 35' insert Clienti select 'Filippo', 'Via Piacenza 7'

Imposta la proprietà DataKeyNames="Id_Cliente" sul gridview. In questo modo definisci qual è la chiave della tua tabella dove le eventuali update e delete verranno eseguite.
Imposta il deletecommand nel SqlDataSource ed aggiungi i parametri. Ecco come ti apparirà il SQLDataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="tua_connectionstring" SelectCommand="SELECT [id_Cliente], [nome], [indirizzo] FROM [Clienti]" DeleteCommand="DELETE FROM Clienti WHERE id_Cliente = @id_Cliente"> <DeleteParameters> <asp:Parameter Direction="Input" Name="id_Cliente" Type="int32" /> </DeleteParameters> </asp:SqlDataSource>

@id_Cliente è il parametro definito sotto nell'SQLDataSource.

Tutto qui.
L'evento di cancellazione è eseguito automaticamente.
L'importante è che il parametro abbia lo stesso nome del campo chiave, con la @ all'inizio
ciao!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

Giovanni_3478 Profilo | Senior Member

ciao

Perfetto ho abilitato la gridview sia ad aggiornare e ad eliminare record.



1) L'SqlDataSource dà la possibilità di inserire un InsertCommand
ma sembra che il gridview non lo supporti? E' esatto?
Come devo procedere per poter inserire dei record in una gridview?


2)Ci sono delle proprietà di SqldataSource:
DeleteCommandType
SelectCommandType
InsertCommandType
UpdateCommandType
di cui nella msdn c'è scritto:

"Ottiene o imposta la stringa SQL utilizzata dal controllo SqlDataSource per recuperare dati dal database sottostante."

e i cui valori possibili sono "text" e "StoredProcedure".



Selezionando StoredProcedure per quelle proprietà mi dà degli errori del tipo:
"Impossibile trovare la stored procedure 'DELETE FROM products WHERE (products_id = @products_id)'. "

Come si fa ad "abilitare" le stored procedure?
Le Stored Procedure sono più veloci ad esempio di una semplice select? E' giusto?
In pratica quali sono i suoi punti di forza?

alx_81 Profilo | Guru

>
>1) L'SqlDataSource dà la possibilità di inserire un InsertCommand
>ma sembra che il gridview non lo supporti? E' esatto?
>Come devo procedere per poter inserire dei record in una gridview?

Io di solito utilizzo un detailsview, ha l'insertcommand.. il GridView no..


>2)Ci sono delle proprietà di SqldataSource:
>DeleteCommandType
>SelectCommandType
>InsertCommandType
>UpdateCommandType
>di cui nella msdn c'è scritto:
>
>"Ottiene o imposta la stringa SQL utilizzata dal controllo SqlDataSource
>per recuperare dati dal database sottostante."
>
>e i cui valori possibili sono "text" e "StoredProcedure".

>Selezionando StoredProcedure per quelle proprietà mi dà degli
>errori del tipo:
>"Impossibile trovare la stored procedure 'DELETE FROM products
>WHERE (products_id = @products_id)'. "

Se imposti il tipo di comando a StoredProcedure, devi indicare nel Comando solo il nome della StoredProcedure, che poi dovrai scrivere su SQL Server..

>Come si fa ad "abilitare" le stored procedure?

Non sono da abilitare, sono da scrivere in t-sql su SQL server..

>Le Stored Procedure sono più veloci ad esempio di una semplice
>select? E' giusto?
>In pratica quali sono i suoi punti di forza?

ti consiglio questo link per farti un po' di chiarezza..
http://msdn2.microsoft.com/en-us/library/ms191436.aspx

Ciao!


Alx81 =)

http://blogs.dotnethell.it/suxstellino

Giovanni_3478 Profilo | Senior Member

Grazie mille per le spiegazioni
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5