Newsgroup: it.comp.www.asp
Titolo: ASP.NET & Access: problemi di scrittura

Salve a tutti,
ho riscritto in 
ASP.NET
 (C#) un'applicazione che prima avevo
sviluppato in ASP.
Come Database per ora continuo ad usare Access visto che il db non è
troppo grosso.
Tuttavia ora ho problemi nelle query in scrittura sul db, mentre in
lettura tutto continua a funzionare come prima.
In particolare su UPDATE mi viene ritornato l'errore:
Operation must use an updateable query.
mentre sulla DELETE mi ritorna l'errore:
Could not delete from specified tables.
che so essere dovuto a diritti di scrittura mancanti sulla cartella
del DB e sul db stesso, ma ora questi diritti sono stati settati allo
user ASPNET (diritti settati a FULL), tuttavia i problemi continuano a
restare.
Per la connessione uso i driver oleDb ed in update/cancellazione uso
un oleDBCommand chiamando il metodo ExecuteNonQuery() alla cui
chiamata viene generata l'eccezione di cui sopra il messaggio di
errore.
Qualcuno sa darmi qualche indicazione ? 
Grazie a tutti,
Fabrizio.


Quale sistema operativo usi?
Cmq, se non ci sono errori nella sintassi delle query, è evidentemente un
problema di permessi nella cartella contenente il database. Inizialmente
verifica se realmente è l'utente ASPNET quello che accede al tuo sistema
verificando se sia attivo o meno l'impersonate.
Un classico esempio è il seguente (nel web.config):
<identity impersonate="false" />
Quindi verifica se l'accesso anonimo è attivo nella cartella virtuale
contenente il sito, e, se sì, controlla quale utente viene utilizzato per
accedere alla risorse (normalmente: IUSR_nomemacchina).
Altro, per ora e data l'ora, non mi viene in mente! :))
Ciao
--
AZ [Microsoft .NET MVP]

 Altro, per ora e data l'ora, non mi viene in mente! :))
Ciao,
dunque ho provato con le indicazioni che mi hai dato e purtroppo il
problema persiste.
Ho per verifica della sintassi cambiato la stringa di connessione e
verificato la medesima sintassi su DB Sql e il tutto funziona.
In particolare, l'utente ASPNET è abilitato con controllo Full sulla
cartella del db e db stesso, l'accesso anonimo è abilitato con user
IUSR_<nomemacchina> ed ho aggiunto nel web_config la riga
dell'impersonate a false, ma nulla.
In debug ad esempio sulla cancellazione, mi dice che necessita di una
query Updatable....
Il sistema operativo è win2003 Server.
Ti viene in mente qualcos'altro ?
Ti ringrazio comunque per la disponibilità.
Fabrizio.

 Fabrizio
Ciao


 cartella contenente il database!
Ok, abilitando lo user IIS_WPG funziona, stranamente non fa l'update
ma solo la cancellazione, ma questo potrebbe essere un problema di db,
non di autorizzazioni.
Grazie molte, sei stato di aiuto.
Fabri.

 Fabri.


 Può essere un problema di codice?

 Fabrizio.


 OleDbType.Variant?
Ciao,
grazie innanzitutto per i tuoi consigli, per quanto riguarda invece le
mie "query" la cosa strana è che in fase di INSERT uso i paramtri
dell'oggetto OleDbCommand e tutto funziona, mentre in UPDATE devo
necessariamente costruire la stringa sql a mano, concatenando i campi.
Sempre se hai ancora voglia di dargli uno sguardo, ti allego i codici
funzionanti e non:
- INSERT (funziona con i parametri oleDb)
strSQL = "INSERT INTO tbl_richieste (nome, cognome, citta,
dataCreazione, stato) VALUES (@nome, @cognome, @citta, @dataCreazione,
@stato)";
objCommand = new OleDbCommand(strSQL, objConn);
 
objCommand.Parameters.Add("@nome", OleDbType.VarChar, 20,
"nome").Value = txbFirstName.Text;
objCommand.Parameters.Add("@cognome", OleDbType.VarChar, 20,
"cognome").Value = txbLastName.Text;
objCommand.Parameters.Add("@citta", OleDbType.VarChar, 20,
"citta").Value = txbCity.Text;
objCommand.Parameters.Add("@dataCreazione", OleDbType.Date).Value =
DateTime.Now;
objCommand.Parameters.Add("@stato", OleDbType.Boolean).Value = true;
- UPDATE (non funziona con i parametri oleDb)
strSQL = "UPDATE tbl_richieste SET citta = @citta, dataAggiornamento =
@dataAggiornamento, stato = @stato WHERE chiave = @chiave";
objCommand.Parameters.Add("@key", OleDbType.Integer).Value = key;
objCommand.Parameters.Add("@stato", OleDbType.Boolean).Value = false;
objCommand.Parameters.Add("@citta", OleDbType.Variant, 20,
"citta").Value = updateValue;
objCommand.Parameters.Add("@dataAggiornamento", OleDbType.Date).Value
= DateTime.Now;
- UPDATE (a mano, concatenando le stringhe, funzionante)
strSQL = "UPDATE tbl_richieste SET citta = '" + updateValue + "',
dataAggiornamento = '" + DateTime.Now + "', stato = " + stato + "
WHERE chiave = @key";
Hai un'idea del perchè ? purtroppo nemmeno con variant funziona, tanto
meno con le date e i campi booleani che in Access corrispondono al
tipo "Si/No".
Premesso che cosi l'applicazione funziona, mi resta ignoto il motivo
per cui nella insert uso le query parametrizzate senza problemi mentre
in update assolutamente no !
Grazie comunque per la tua disponibilità,
Fabri.