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
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Errore esecuzione qurey Cmd.ExecuteScalar(), Timeout scaduto
martedì 25 settembre 2007 - 12.10
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Maurizio_Roma
Profilo
| Newbie
43
messaggi | Data Invio:
mar 25 set 2007 - 12:10
Ciao a tutti, ho un problema con l'esecuzione di una query con sql server 2005.
Ho fatto un'applicazione in VB.NET, e ho la necessità di esegueri un backup del dabatese ogni 13 mesi, trasferendo i record più vecchi in un db di backup e cancellandoli dal db principale.
Per fare questo utilizzo un select case un comando sql select(*) impostando un numero massimo di record.
L'esecuzione della query è fatta tramite Cmd.ExecuteScalar(), ma quando il numero di record della tabella è grandissimo e la differenza tra questo numero il numero massimo di record è tanta, sull'esecuzione della query esce il messaggio di errore "Timeout scaduto È trascorso il periodo di timeout prima del completamento dell'operazione oppure il server non risponde".
L'impostazione 0 sulla stringa di connessione dovrebbe darmi un tempo di timeout illimitato, anche sulle impostazioni del server sql ho messo 0, sulle impostazione attesa query ho inserito il valore 47483647 che dovrebbe essere il massimo consentito, ma questo errore esce puntualmente a ogni esecuzione della query.
Come posso fare a risolvere questo problema?
Grazie
Teech
Profilo
| Expert
573
messaggi | Data Invio:
mar 25 set 2007 - 12:34
In primis ti consiglio di non fare questa operazione da VB.NET ma creando una Stored Procedure in SQL e richiamarla da VB.NET.
Comunque, dal comportamento che descrivi il comando che lanci dovrebbe essere una INSERT INTO TabellaBK SELECT ... FROM ... che non restituisce valori (se non le AffectedRow) quindi non devi usare il metodo ExecuteScalar del command ma ExecuteNonQuery...
Se invece stai portando i dati in memoria sul client per poi processarli dovrei utilizzare una SELECT come hai fatto... Ma a questo punto sorgono diverse possibilità (non hai detto quale utilizzi) di leggere sequenzialmente il set di record utilizzando un DataReader o crearsi un DataTable in memoria e qui entrano in gioco i DataAdapter...
Posta il codice che hai scritto che provo a darci un occhio appena possibile...
Ciao!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Maurizio_Roma
Profilo
| Newbie
43
messaggi | Data Invio:
mar 25 set 2007 - 13:24
Ciao, copio direttamente la parte di applicazione che da l'errore,
Connessione = New SqlConnection("Data Source=localhost; Initial Catalog=Main; Connection Timeout = 0; Integrated Security=SSPI;")
Cmd.Connection = Connessione
Connessione.Open()
Count = 1
For Count = 1 To 12
Select Case Count
Case 1
Inser = "SELECT COUNT (*) AS Expr1 FROM Bagagli_C"
Tabella = "Bagagli_C"
NumMassimo = 12049080
Case 2
Inser = "SELECT COUNT (*) AS Expr1 FROM Baie_Voli_C"
Tabella = "Baie_Voli_C"
NumMassimo = 84530
Case 3
Inser = "SELECT COUNT (*) AS Expr1 FROM Msg_I_IATA_Bag_C"
Tabella = "Msg_I_IATA_Bag_C"
NumMassimo = 14605125
Case 4
Inser = "SELECT COUNT (*) AS Expr1 FROM Msg_I_IATA_C"
Tabella = "Msg_I_IATA_C"
NumMassimo = 9214560
Case 5
Inser = "SELECT COUNT (*) AS Expr1 FROM Nomi_Volo_C"
Tabella = "Nomi_Volo_C"
NumMassimo = 707050
Case 6
Inser = "SELECT COUNT (*) AS Expr1 FROM Pax_Coi_C"
Tabella = "Pax_Coi_C"
NumMassimo = 66755
Case 7
Inser = "SELECT COUNT (*) AS Expr1 FROM Posizioni_bag_anom"
Tabella = "Posizioni_bag_anom"
NumMassimo = 153655
Case 8
Inser = "SELECT COUNT (*) AS Expr1 FROM Posizioni_Bag_C"
Tabella = "Posizioni_Bag_C"
NumMassimo = 33197380
Case 9
Inser = "SELECT COUNT (*) AS Expr1 FROM Report_FV_C"
Tabella = "Report_FV_C"
NumMassimo = 84135
Case 10
Inser = "SELECT COUNT (*) AS Expr1 FROM Rid_Scarto_bag_c"
Tabella = "Rid_Scarto_bag_c"
NumMassimo = 9464595
Case 11
Inser = "SELECT COUNT (*) AS Expr1 FROM Scali_C"
Tabella = "Scali_C"
NumMassimo = 398950
Case 12
Inser = "SELECT COUNT (*) AS Expr1 FROM Voli_C"
Tabella = "Voli_C"
NumMassimo = 389470
End Select
Cmd.CommandText = Inser
Cmd.CommandType = CommandType.Text
returnValue = Cmd.ExecuteScalar()
If returnValue > NumMassimo Then
nfiIcona.ShowBalloonTip(20, "Nuovo BO SERVER", "Inizializzazione processo di backup " & Tabella & "", ToolTipIcon.Info)
Path = "C:\Acquisizione\Log\"
Log = Path & (Replace(DataOper, "/", "-")) & " " & "Log File" & ".txt"
FileOpen(2, Log, OpenMode.Append)
WriteLine(2, vbCrLf & Tabella)
FileClose(2) 'Chiude il file
'---------------Storico Applicazione--------------
FileOpen(2, "C:\Acquisizione\Log\Storico Applicazione.txt", OpenMode.Append)
debug = Today & " " & TimeOfDay & " " & "Inizio backup tabella " & Tabella & " "
WriteLine(2, debug)
FileClose(2) 'Chiude il file
'---------------Storico Applicazione--------------
Ris = returnValue - NumMassimo
Console.WriteLine("Starting row count = {0}", Ris)
Selezione = "SELECT TOP ( " & Ris & ") * FROM " & "" + Tabella + "" & ""
Dim commandSourceData As SqlCommand = New SqlCommand(Selezione, Connessione)
nfiIcona.Text = "Backup di " & Ris & " records della tabella " & Tabella & ""
Dim reader As SqlDataReader = commandSourceData.ExecuteReader
Using destinationConnection As SqlConnection = New SqlConnection("Data Source=localhost; Initial Catalog=Backup; Integrated Security=SSPI;")
destinationConnection.Open()
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(destinationConnection)
bulkCopy.DestinationTableName = Tabella
Try
bulkCopy.WriteToServer(reader)
Catch
FileOpen(2, Log, OpenMode.Append)
Testo = TimeOfDay & " Connessione ad SQL Fallita - Backup tabella " & Tabella & " impossibile"
WriteLine(2, Testo)
FileClose(2) 'Chiude il file
reader.Close()
BK_error = True
Exit Try
Finally
reader.Close()
End Try
End Using
destinationConnection.Close()
'---------------Storico Applicazione--------------
FileOpen(2, "C:\Acquisizione\Log\Storico Applicazione.txt", OpenMode.Append)
debug = Today & " " & TimeOfDay & " " & "Fine backup tabella " & Tabella & " "
WriteLine(2, debug)
FileClose(2) 'Chiude il file
'---------------Storico Applicazione--------------
End Using
If BK_error = False Then
nfiIcona.ShowBalloonTip(20, "Nuovo BO SERVER", "Delete valori database Main della tabella " & Tabella & "'", ToolTipIcon.Info)
Delete = "Delete TOP ( " & Ris & ") FROM " & "" + Tabella + "" & ""
Cmd.CommandText = Delete
Cmd.ExecuteNonQuery()
FileOpen(2, Log, OpenMode.Append)
Testo = TimeOfDay & " Backup di " & Ris & " records della tabella eseguito correttamente"
WriteLine(2, Testo)
FileClose(2) 'Chiude il file
Else
FileOpen(2, Log, OpenMode.Append)
Testo = TimeOfDay & " Impossibile cancellare i record dal database Main"
WriteLine(2, Testo)
FileClose(2) 'Chiude il file
End If
End If
Next
Connessione.Close()
nfiIcona.Visible = False
Application.Exit()
End Sub
L'errore è generato nel punto returnValue = Cmd.ExecuteScalar()
Ciao.
Teech
Profilo
| Expert
573
messaggi | Data Invio:
mar 25 set 2007 - 17:57
Ho guardato al volo ma non ho visto il dimensionamento della variabile returnvalue: prova con
Dim returnvalue as Integer = cmd.ExecuteScalar()
Non vorrei fosse un problema di cast implicito...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Maurizio_Roma
Profilo
| Newbie
43
messaggi | Data Invio:
mar 25 set 2007 - 18:30
La variabile è dimensionata all'inizio insieme alle altre, le dichiarazioni non le ho copiate. Comunque mi dicevano che Microsoft ha un timeout di connessione che non può essere illimitato, per poter lasciare la connessione al DB libera per altre richieste, forse dipende da questo, anche se non so se è vero.
Teech
Profilo
| Expert
573
messaggi | Data Invio:
mer 26 set 2007 - 15:25
So per certo esistere una chiave di registro ma non so esattamente quale sia... Visto che loperazione è delicata non mi sento di dare consigli sulle modifiche al registro soprattutto perchè non ho la vertezza di quale sia questa chiave...
Spero che la dritta sia utile...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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 !