81 messaggi dal 30 giugno 2013
www.topgan.it
ciao
lavoro con webmatrix quindi in asp.net mvc
Io ho una lista di iscritti prelevati da un data base quindi per ogni record ho creato una checkbox dove se spuntata mi da il valore dell'id e questo valore lo momorizza in una stringa:
<INPUT style="width: 12px" TYPE="checkbox" NAME="action" VALUE=@ID />

ora nella parte di codice che si occupa della cancellazione:
string comando = "";
comando = Request.Form["action"];
db.Execute ("DELETE FROM Anonimi WHERE ID IN (@0)",comando);

Adesso il punto è questo:
Se stampo a video la stringa comando mi restituisce gli id selezionati separati da virgola es.(1,8,7,5),
mentre se faccio eseguire la Query mi da errore:
Formato della stringa di input non corretto.
Nel mentre se seleziono un solo id in modo che il valore della stringa comando e 1 tutto funziona.
Mille grazie e devoto a chi mi riesce a spiegare ed a risolvere questo problema.
Ho cercato invano sul web per vedere di trovare una soluzione senza venirne a capo di nulla.

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
13 messaggi dal 11 novembre 2014
se il campo nel database non è di tipo numerico utilizza gli apici ('1',2','3')
81 messaggi dal 30 giugno 2013
www.topgan.it
ciao candylime e mille grazie per il tuo interessamento
Poro il campo e di tipo int numerico.
Ora provando a ragionare sopra ma non so se lo faccio giusto.
La checkbox memorizza gli Id in una stringa separandoli da una virgola 25,47,65 ecc... e quando stampo a video mela mostra in questo modo, quindi sarebbe il modo giusto da inserire nella Query ... WHERE ID IN (25,47,65) di fatti facendo una prova inserendoli manualmente senza prenderli dalla stringa la Query funziona benissimo. Allora il problema sta nel passaggio dalla stringa alla Query ma la stringa se la stampo a video e giusta allora è il modo in coi viene passata dalla Query WHERE ID IN (@0),Stringa che fa confusione anzi direi che si comporta bene perché vedendo che è una stringa la passa cosi WHERE ID IN ("25,47,65") e questo fa si che da errore perché e sbagliato. allora la soluzione sarebbe quella con una istruzione eludere e forzare questo modo di interpretare la stringa e costringendo a passarla senza le virgolette.
Chissà se questo ragionamento è quello giusto?
se si esiste un'istruzione che impedisca di mettere le virgolette?
Grazie Davvero moltissimo a Tutti e speranzoso di una soluzione

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
13 messaggi dal 11 novembre 2014
dovresti postare tutto il codice...comunque prova così
db.Execute(string.Format("DELETE FROM Anonimi WHERE ID IN ({0})", comando));
81 messaggi dal 30 giugno 2013
www.topgan.it
Ciao candylime
Ho provato come da te suggerito e mi da sempre questo errore:

Errore server nell'applicazione '/'.

Formato della stringa di input non corretto.

Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere la traccia dello stack.

Dettagli eccezione: System.FormatException: Formato della stringa di input non corretto.

Errore nel codice sorgente:
Riga 16: db.Execute (string.Format("DELETE FROM Anonimi WHERE ID IN ({@0})",comando));
e sta volta da L'ERRORE ANCHE se selezione uno solo di Id quando il valore della stringa e uno solo ID.
Provo ad Inserire tutto il codice:
//parte che si interessa di selezionare e memorizzare gli ID nella stringa
@{
var Tutti = db.Query(@"SELECT * FROM Anonimi).ToList();
}
<form method="post">
<ol>
 @foreach (var Visitatore in Tutti)
    {
        <li>
<INPUT style="width: 12px" TYPE="checkbox" NAME="action" VALUE=@Visitatore.ID />
       </li>
 } 
</ol>
<input style="float: right;width: 70px;height: 35px" name="reset" type="reset" value="azzera">
<input style="float: right;width: 70px;height: 35px" name="submit" type="submit" value="Elimina">
</form>
@{
//parte che si occupa di eliminare i record
string comando = "";
if (IsPost) {
    comando = Request.Form["action"];       
    
    db.Execute ("DELETE FROM Anonimi WHERE ID IN (@0)",comando);
    
}
}

Grazie ancora per la pazienza e per l'interesse
Modificato da TopGan il 06 giugno 2016 19.16 -

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
3.939 messaggi dal 28 gennaio 2003
senti, non conosco né Matrix né mvc, ma prova a guardare queste istruzioni in basic:

elenco di chiavi numeriche separate da virgola: es. 1,4, 86, 58

Dim keys As String = Request.Form("check_delete")



istruzione sql
Sql = String.Format("DELETE FROM elaborazioni_utente WHERE id_elaborazione in ({0}) ", keys)



esecuzione sql:
Comando.CommandText = Sql
Comando.ExecuteNonQuery()


in debug basta prendere il valore di sql e vedere se corretto
Modificato da pietro09 il 06 giugno 2016 20.07 -
13 messaggi dal 11 novembre 2014
la stringa corretta è senza @:
string.Format("DELETE FROM Anonimi WHERE ID IN ({0})", comando)
prova cosi
Modificato da candylime il 06 giugno 2016 23.01 -
81 messaggi dal 30 giugno 2013
www.topgan.it
Wow candylime
Grazie davvero mi hai risolto un bel grattacapo è giusto senza @ funziona perfettamente.
Ti sono debitore di una cena

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum

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.