Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Come ca***o si inseriscono i record.... proprio non ci riesco!

    Ciao!

    Sto passando ad ASP.NET e i problemi ke sto incontrando sono enormi!!!

    ho questo codice che ho scritto seguendo vari suggerimenti quae la per inserire un record in una tabella access

    codice:
     
     dim connMailing as System.Data.OleDb.OleDbConnection
     connMailing= New  OleDbConnection(system.configuration.configurationsettings.appsettings("ConnStringMailing"))
     connMailing.Open ()
     
     dim Adapter as new OleDBDataAdapter ("SELECT * FROM TAB_INDIRIZZI WHERE INDIRIZZO='" & email & "'", connMailing)
     dim rs as new DataSet
     
     adapter.fill (rs, "TAB_INDIRIZZI")
     
    dim cmdcount as new oledbcommand ("SELECT COUNT(*) FROM TAB_INDIRIZZI WHERE INDIRIZZO='" & email & "'", connMailing)
    	dim records as integer = cmdcount.executescalar()
    	if records >0 then
    		lblmessaggi.text="Questo indirizzo è gia registrato!"
    		exit sub
    	end if
    	
    	
    	dim nrow as datarow = rs.tables("TAB_INDIRIZZI").newrow()
    	nrow("NOME")=nome
    	nrow("INDIRIZZO")=email
    	dim tablemailing as datatable =  rs.tables("TAB_INDIRIZZI")
    	
    	tablemailing.rows.add(nrow)
    		
    	adapter.update (rs, "TAB_INDIRIZZI")
    	
    	adapter.dispose
    	rs.dispose()
    	connMailing.dispose()
    MA MI DA QUESTO MALEDETTO ERRORE!!!

    codice:
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
    
    Exception Details: System.InvalidOperationException: Update requires a valid InsertCommand when passed DataRow collection with new rows.
    
    Source Error: 
    
    
    Line 74: 	tablemailing.rows.add(nrow)
    Line 75: 		
    Line 76: 	adapter.update (rs, "TAB_INDIRIZZI")
    Line 77: 	
    Line 78: 	adapter.dispose
    KE MALEDIZIONE VUOL DIRE???
    non ce la faccio +!!
    :master:
    sono esauito con questo maledetto ASP.NET e non capisco x quale maledetto motivo non posso usare il VEKKIO ADODB per inserire records...

    Vi prego, potete postarmi una forma di codice ottimale per inserire record??? magari in una forma molto simile a quella che usavo con ADODB cioè che specifico il campo per ogni riga ..... O INSOMMA QUALCOSA CHE FUNZIONI!!!!

    GRAZIE A KI MI RISPONDERA'!!!

    CIAO!
    Alex

  2. #2
    Prima di tutto ti consiglio di dare un'occhiata al regolamento. Evitiamo parole inutili e titoli "a vanvera".

    Qui c'è un articolo che può fare al caso tuo: http://support.microsoft.com/kb/821765/EN-US/

    Comunque quell'errore potrebbe essere dovuto al fatto che, per es., non hai una chiave primaria indicata nel database. Ad es. potresti utilizzare un campo Int ma non hai specificato che deve essere un Contatore (in Access) o Identity (in SqlServer).

    Non puoi utilizzare il vecchio "adodb" semplicemente perché in .NET è stato sostituito dal nuovo ADO.NET.
    E' ovvio che il passaggio dal vecchio ASP al .NET è difficile.. hanno un livello di difficoltà completamento diverso perché "ragionano" in maniera diversa.

  3. #3

    Re: Come ca***o si inseriscono i record.... proprio non ci riesco!

    Originariamente inviato da tritolo86
    Sto passando ad ASP.NET e i problemi ke sto incontrando sono enormi!!!
    ho questo codice che ho scritto seguendo vari suggerimenti quae la per inserire un record in una tabella access
    Andando avanti a tentativi con .net farai molta piu' fatica di quanto si faceva con asp e vbscript.
    Detto questo, usi il dataadapter per riempire un dataset e in particolare una tabella. Per farlo, valorizzi la proprieta' selectcommand del dataadapter con l'opportuna stringa di selezione. Fino a questo punto il datadapter e' capace soltanto di fare appunto una selezione sui record e riempire una tabella e nient'altro. Per far si che ti inserisca ad esempio nuovi record dovrai preoccuparti di scrivere una Insert sql e valorizzare la proprieta' insertcommand del datadapter cosi come per l'update dovrai scrivere una query sql di update e valorizzare la proprieta' updatecommand del dataadapter.
    Ecco sipegato il motivo dell'errore
    Update requires a valid InsertCommand when passed DataRow collection with new rows
    in piu' guardando nel codice vedo che in fondo usi dispose inutilmente. Nell'ambiente managed di .net esiste un servizio automatico che e' il garbage collector che fa pulizia da solo senza bisogno di chiamarlo in causa. L'unico oggetto che faresti bene a chiudere e' la connection ma fossi in te eviterei la dispose e userei la funzione .close in modo che se il dataprovider ne e' capace ti permettera' in seguito di riutilizzare la connection (connection pooling).
    Saluti a tutti
    Riccardo

  4. #4
    Innanzitutto scusate per il tutolo...capirete che ero disperato...

    Per quanto riguarda il problema, beh....

    Per query di inserimento SQL intendi la "INSERT..."? Ieri navigando priam di scappare, avevo intravisto un articolo MS che utilizzava un'altro metodo sicurmente molto più bello da usare a livello di lettura del codice...

    ricordo che usava dei Command e dei

    .parameter "@campo" ="valore"

    ma non ricordo che command erano e come venivano usati, sicuramente preferirei usare questo metodo più che delle INSERT sql che a un certo punto dventano complicate da correggere se c'è qualche errore... Se sapete di cosa sto parlando, potetre darmi un sample di codice per usare questo metodo? Grazie!

    per quanto riguarda i DISPOSE li avevo messi perchè li cosigliava MS in un articolo dicendo che è meglio chiudee le connesioni usando Close, Dispose o Finalize... era solo una questione che li uso anche in VB.net per liberare risorse...

    Ora farò alcune prove anche seguendo l'articolo di ZOFM!

    Fatemi sapere

    Ciao!
    Alex

  5. #5
    Originariamente inviato da tritolo86
    Per query di inserimento SQL intendi la "INSERT..."? Ieri navigando priam di scappare, avevo intravisto un articolo MS che utilizzava un'altro metodo sicurmente molto più bello da usare a livello di lettura del codice...
    certo che intendo la insert... quello che hai indicato e' un parametro. E' consigliabile usare i parametri nelle query sql (select insert update e delete) al posto di mettere replace vari nel testo della query.
    sicuramente preferirei usare questo metodo più che delle INSERT sql che a un certo punto dventano complicate da correggere se c'è qualche errore... Se sapete di cosa sto parlando, potetre darmi un sample di codice per usare questo metodo?
    La domanda sembra essere: voglio imparare ado.net mi fate un esempio? Per questo e' meglio comprare un testo e/o immergersi in msdn.microsoft.com per un mesetto per poi iniziare a fare qualcosa di buono. Ma mettiamo che la domanda non e' questa, un esempio pratico su come valorizzare un dataadapter senza controllare in alcun modo la sintassi e giusto per darti una idea es.
    codice:
    tuodataadapter.insertcommand = "INSERT INTO tabella (campo1, campo2) VALUES (?param1, ?param2)"
    tuodataadapter.insertcommand.parameters.add("@param1", oledbtype.int)
    tuodataadapter.insertcommand.parameters.add("@param2", oledbtype.varchar)
    Saluti a tutti
    Riccardo

  6. #6
    Beh, grazie!

    Mi seriva il codice per il dataadapter....

    la domanda non era "vorrei imparare ADO.NET" perchè un po ' gia lo uso in VB.NET ma è che ho molti problemi con la sua applicazione in WEB...

    Cmq ora con le insert sql ci sono riuscito.

    x ZOFM nonostante mi sia inspirato sin dall'inizio a quell'articolo, NON FUNZIONA... chissà perchè... forse qualche incompatibilità del server (che cmq ha il framework 1.1) o magari sono io che nn applico bene (strano però ho ricontrollato il codice decine di volte...).

    Grazie di tutto!!

    Ciao!
    Alex

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.