Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Gestione errori: ciclare campi sql con vb.net
giovedì 30 aprile 2009 - 11.41
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
giaarcix
Profilo
| Newbie
18
messaggi | Data Invio:
gio 30 apr 2009 - 11:41
Ciao a tutti,
una questione.
Ho una tabella in un db sql2008 nella quale ogni secondo vengono scritte
delle righe con un id numerico incrementale.
Il mio programma deve ciclare ogni tot secondi queste righe (estraendo
solo quelle nuove in base all'indice), eseguire alcune operazioni, e
poi scrivere il risultato dei suoi calcoli all'interno di un'altra
tabella.
Il codice è qualcosa del genere:
Data_sql.Open(query, conn_sql, 3, 3)
Do While Data_sql.EOF = False
campo1= Data_sql.Fields("campo1").Value
campo2= Data_sql.Fields("campo2").Value
campo3= Data_sql.Fields("campo3").Value
Call eseguiOperazioni(campo1, campo2, campo3)
Data_sql.MoveNext()
Loop
Vorrei sapere a livello di gestione degli errori quale potrebbe essere
il modo migliore di gestire la cosa.
Non vorrei trovarmi in un loop infinito per esempio... al che ho
pensato di mettere un try catch all'interno del do while. Ma se invece
fosse la query di apertura del recordset a dare errore? Metto un try
catch esterno ed uno interno??
Grazie... se c'è bisogno di delucazioni chiedetemi!!
Giacomo da Pavia
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 30 apr 2009 - 13:49
Ciao Giacomo,
non so che tipo di operazioni dovrai esegure sui record nel la query che utilizzi per estrarre i dati, ma
utilizzando un datareader con la proprietà Read, non avrai l'inconveniente di trovarti un un loop infinito.
Do White TuoDataReader.Read = true
campo1= Data_sql.Fields("campo1").Value
campo2= Data_sql.Fields("campo2").Value
campo3= Data_sql.Fields("campo3").Value
Call eseguiOperazioni(campo1, campo2, campo3)
Loop
>Vorrei sapere a livello di gestione degli errori quale potrebbe
>essere il modo migliore di gestire la cosa.
Se il datareader restituisce un recordset con la query che gli passi, il ciclo cliclera su quei record.
Io ti consiglio di utilizzare per ogni campo la funzione ISNULL del DataReader:
>if MyDataReader.IsNull("campo")=true then ' intercetta l'eventuale campo NULL
L'unico inconveniente che potresti trovare è se la funzione EseguiOperazioni generasse un'eccezione, in quel caso la dovresti inserire in un blocco try catch.
Fammi sapere
------------------------
Luxsor
giaarcix
Profilo
| Newbie
18
messaggi | Data Invio:
gio 30 apr 2009 - 14:27
Ciao!
Grazie mille sei stato gentilissimo!
Ho provato ad usare il dataReader e tutto funziona. In effetti così è sicuramente meglio.
Ora però vado più a fondo in ciò che il mio programma fa e vediamo se riesci a darmi uno spunto in più...
In pratica funziona (già funziona ma lo voglio appunto migliorare) da "accentratore" di segnalazioni: legge appunto delle segnalazioni su varie tabelle, i cui dati vengono incrementati da altri programmi, le filtra, eventualmente le corregge, e poi le inserisce in un unico calderone opportunamente macinate in modo che siano fruibili agli utenti.
Prima ho parlato di sql2008 perchè effettivamente stavo provando su quella parte del programma, ma in realtà i database su cui deve leggere queste segnalazioni sono:
1 sql 2000
1 sql 2005
1 sql 2008
2 mysql
1 access 97 (!!!!!)
Fai conto che ci sono cinque sub che vengono chiamate in sequenza, ed in ciascuna viene effettuata la lettura dal relativo db, vensono eseguiti i calcoli, e vengono scritti i risultati.
Ora, non so se ho preso un esempio su internet basato su sql, ma per usarlo ho dovuto creare dei:
myCommand as sqlCommand
myConnection as sqlConnection
dr as sqlDataReader
Il che mi fa pensare che le stesse cose non vadano bene per le connessioni ai database diversi da sql...?
Comunque mi fa piacere perchè sto esplorando un mondo nuovo!
Se riesci a darmi ancora una mano mi fai un piacere!
Grazie!
Giacomo
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 30 apr 2009 - 20:43
Ciao Giacomo,
>Il che mi fa pensare che le stesse cose non vadano bene per le
>connessioni ai database diversi da sql...?
Infatti.
Per database Sql Server devi utilizzare il namespace System.Data.SqlClient
per Access, invece il namespace System.Data.OleDb
Le funzioni sono identiche a patto del nome (es. SqlCommand e l'altro OleDBCommand ecc..)
Un'altra cosa che cambia è la rispettiva stringa di connessione, infatti per ogni datasource utilizzato devi associare la propria stringa di connessione
Dai un occhiata qui:
http://www.connectionstrings.com/
Ciao
------------------------
Luxsor
Torna su
Stanze Forum
Elenco Threads
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 !