Eccezioni SQL

lunedì 21 aprile 2008 - 08.31

Domin Profilo | Newbie

Ciao,

Vorrei creare file che tutte le volte in cui ho un'eccezione SQL mi salva la query in un file di testo, per farlo ho creato questo codice:

string query;
using (MySqlConnection conn = new MySqlConnection(connectionstring)
{
query = "SELECT * FROM.....";
....
}
catch (MySqlException ex)
{
try
{

//Pass the filepath and filename to the StreamWriter Constructor
System.IO.StreamWriter sw = System.IO.File.AppendText("debug.txt");

//Write a line of text
sw.WriteLine(DateTime.Now.ToString());
sw.WriteLine("Descrizione Errore: \n" + ex.ToString() + " \n query: " + query + " \n ");
sw.WriteLine("");

//Close the file
sw.Close();
}
catch (Exception)
{
MessageBox.Show("Non è stato possibile salvare l'errore su file...");
}
}
finally
{
conn.Close();
}
}


L'errore che ho è questo: Errore 1 Utilizzo della variabile locale 'query' non assegnata

amdbook Profilo | Junior Member

Ciao, ma il codice che scrive su file dove si trova? Nella stessa routine della connessione o in un'altra routine o classe?

Domin Profilo | Newbie

stessa connessione dentro il blococ using, ed io la string la dichiamo prima di using, non capisco l'errore...

sw.WriteLine(DateTime.Now.ToString());
sw.WriteLine("Descrizione Errore: \n" + ex.ToString() + " \n query: " + query + " \n ");
sw.WriteLine("");



amdbook Profilo | Junior Member

Piccola svista, devi inizializzare la variabile query:

string query="";

o così:

string query=string.Empty;

Domin Profilo | Newbie

ma io ho già query = "SELECT * FROM....."; dentro il tryè questo che non campisco....

amdbook Profilo | Junior Member

Si, ma se non viene inizializzata opportunamente viene generato l'errore in fase di compilazione.
Puoi avere qualche informazione in più al link seguente:

http://msdn2.microsoft.com/it-it/library/4y7h161d(VS.80).aspx

Domin Profilo | Newbie

Credo che a qusto punto il problema sia un'altro...

Perchè visto l'errore a me sembra che la varibile query valga soltanto dentro il blocco USING, quindi formulo meglio la domanda...

Come faccio a fare in modo che quando ho un'eccezione SQL, dentro il blocco catch mi venga riportata la query sql dell'errore?



Perchè la variabile è inizializata,m secondo me vale solo dentro using, e se faccio come dici te, la variabile query mi resta vuota e quindi è inutile nel debug...

amdbook Profilo | Junior Member

Dopo che hai inizializzato la stringa, query sarà del tipo query="". Se query risulta vuota allora vuol dire che l'eccezione viene sollevata prima
che questa venga impostata, ovvero durante il tentativo di connessione. Se vuoi in ogni caso fare il log della query puoi semplicemente
inizializzare questa variabile con il testo della query. Ovvero :

String query ="SELECT * FROM..."; Using (...){ ... }

Domin Profilo | Newbie

in questo modo però ho la query iniziale, mentre io ho più query all'interno di try...

se la query che da l'errore è la seconda io vedrò la prima, no?

amdbook Profilo | Junior Member

In teoria, la variabile query è impostata prima di eseguire fisicamente la query su database, quindi dovresti vedere l'ultima eseguita, ma questo dipende
anche come hai sviluppato il codice all'interno del try...catch.
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5