115 messaggi dal 06 luglio 2006
salve,

non riesco a capire dove sbaglio.

Ho una grid con l'elenco dei dati ed una formView per la visualizzazione del dettaglio.
Dopo aver selezionato il dato nella grid, automaticamente mi visualizza la formView di dettaglio.
Quando cancello il movimento, non mi da' nessun errore, ma non lo cancella. Ho controllato + volte le query, ma non ho capito dove sbaglio.
Per provare ho realizzato una formView collegata alla stessa tabella e se cancello funziona.
Ho controllato il codice delle query ed è lo stesso.

Cosa posso fare per capire dove sbaglio?

Uso l'oggetto SqlDataSource


grazie

Gaetano
Per farci capire meglio e quindi aiutarti riesci a postare il tuo codice?

Selezioni correttamente la riga?Fai il Bindig della GrdiView dopo la cancellazione?
Ciao

Corso SEO 17 maggio 2014 a Parma
Libro SEO, SEM e Web Marketing
Siti Web Parma
115 messaggi dal 06 luglio 2006
Questo è coldice del delete della Query:
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = @original_Progressivo) AND (Capitolo = @original_Capitolo) AND (Ufficio = @original_Ufficio) AND (FatturaNume = @original_FatturaNume) AND (FatturaData = @original_FatturaData) AND (Importo = @original_Importo) AND (Fornitore = @original_Fornitore) AND (CodGestionale = @original_CodGestionale) AND (OggettoSpesa = @original_OggettoSpesa) AND (Residuo = @original_Residuo) AND (Direzione = @original_Direzione)"

I parametri per la cancellazione sono:
<DeleteParameters>
<asp:Parameter Name="original_Progressivo" Type="Int32" />
<asp:Parameter Name="original_Capitolo" Type="String" />
<asp:Parameter Name="original_Ufficio" Type="String" />
<asp:Parameter Name="original_FatturaNume" Type="String" />
<asp:Parameter Name="original_FatturaData" Type="DateTime" />
<asp:Parameter Name="original_Importo" Type="Decimal" />
<asp:Parameter Name="original_Fornitore" Type="String" />
<asp:Parameter Name="original_CodGestionale" Type="String" />
<asp:Parameter Name="original_OggettoSpesa" Type="String" />
<asp:Parameter Name="original_Residuo" Type="Boolean" />
<asp:Parameter Name="original_Direzione" Type="String" />
</DeleteParameters>

Per la selezione della riga funziona, perchè nella formView vengono visualizzati i dati del movimento selezionato.

Il binding sella gridView non lo faccio, non so ancora dove convenga inserirlo, ma aprendo manualmente il dataBase il movimento c'é.

qualche consiglio?

grazie
115 messaggi dal 06 luglio 2006
ho notato una cosa, se invece del codice completo:
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = @original_Progressivo) AND (Capitolo = @original_Capitolo) AND (Ufficio = @original_Ufficio) AND (FatturaNume = @original_FatturaNume) AND (FatturaData = @original_FatturaData) AND (Importo = @original_Importo) AND (Fornitore = @original_Fornitore) AND (CodGestionale = @original_CodGestionale) AND (OggettoSpesa = @original_OggettoSpesa) AND (Residuo = @original_Residuo) AND (Direzione = @original_Direzione)"

uso solo questo:
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = @original_Progressivo), la cancellazione funziona.

Qualcuno mi sadire perché.

M'interessa, in qunto per la variazione mi succede lo stesso

grazie
Scusami forse non ho capito,
te devi cancellare un record in base a cosa? all'id a un parametro?
di solito se cancelli un record ci si basa sull'id dell'elemento
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = @original_Progressivo)
se Progressivo è il tuo id o chiave univoca
oppure
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = ?)

Ciao

Corso SEO 17 maggio 2014 a Parma
Libro SEO, SEM e Web Marketing
Siti Web Parma
492 messaggi dal 08 gennaio 2007
Ciao, hai provato a profilare? Se esegui la delete in management studio la esegue? Ma ti sono realmente necessari tutti quei paramentri pe la delete? Mi sembra tanto uno di quei codici generati da VS, l'id ti dovrebbe bastare...

Saluti
Ciao,

quel tipo di query generata da Visual Studio è uno dei tanti modi per implementare la optimistic concurrency: lo scopo di tutte quelle condizioni di where, infatti, è proprio quello di eliminare la riga se e solo se i valori presenti su DB sono esattamente i medesimi che hai fetchato in fase di SELECT, escludendo quindi che qualche altro utente abbia modificato qualcosa.

Il fatto che a te non elimini nulla è indice che probabilmente tra tutti quei valori original_nomecampo ce ne sia qualcuno (forse che non fetchi nella select??) che non corrisponde a quanto presente su DB.

Fossi in te proverei
1) a usareil profiler di SqlServer, come ti è stato consigliato, per fare una verifica puntuale su tali valori
2) controllare se effettivamente nella select recuperi tutti quei campi

Mi suona comunque strano il fatto che non si verifichi alcun errore, solitamente in casi come questi viene sollevata una DBConcurrencyException

Marco
115 messaggi dal 06 luglio 2006
maltra ha scritto:
Scusami forse non ho capito,
te devi cancellare un record in base a cosa? all'id a un parametro?
di solito se cancelli un record ci si basa sull'id dell'elemento
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = @original_Progressivo)
se Progressivo è il tuo id o chiave univoca
oppure
DeleteCommand="DELETE FROM Debito WHERE (Progressivo = ?)

Ciao


premetto che non sono molto esperto perchè sono nuovo sia di VS che di MSSQL che di C# che di ASP.NET e quindi un po' alla volta sto cercando di capire il percorso di apprendimento che devo fare.

In VS ho creato una grid collegata ad una formView. Attraverso la select della grid visualizzo la form con il movimento scelto.
La select della form è:
SELECT Progressivo, Capitolo, Ufficio, FatturaNume ..., FROM Debito WHERE (Progressivo = @Progressivo) ORDER BY Capitolo

Personalmente penso che il progressivo (chiave univoca autoincremento) dovrebbe bastare ed in effetti se lascio solo quello me lo cancella. Però ho letto che qualcun altro potrebbe cancellare o variare da un altro PC collegato ad internet e quindi il controllo su tutti i campi è obbligatorio, questo è vero se ho capito bene come funziona il tutto.

che ne pensi?

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.