Posts Tagged Errore
Problema con locate in Linux : can not open `/var/lib/mlocate/mlocate.db’: No such file or directory
Avete provato ad usare il comando locate in linux per cercare un file o una directory ma il risultato è stato il seguente errore?
#locate tomcat
locate: can not open `/var/lib/mlocate/mlocate.db’: No such file or directory
Bene, il problema è che il file mlocate.db non esiste… Fantastico ![]()
Non vi preoccupate basta semplicemente lanciare il comando per aggiornare, o creare se non esiste, tale file.
Il file mlocate.db contiene i dati relativi alla struttura di file e directory per velocizzare la ricerca rispetto al comando find.
#updatedb
Ora possiamo usare il nostro locate!.
Una piccola dritta, utilizzate locate in insieme a al comando grep e troverete tutto quello che serve.
#locate tomcat
/usr/local/tomcat5
/usr/local/tomcat6
#locate tomcat | grep 5
/usr/local/tomcat5
Risolvere collation conflict in SQL Server
State avendo a che fare con questo fastidiosissimo errore?
Cannot resolve collation conflict for equal to operation.
Il collation è un set di caratteri utilizzato per gestire alfabeti di diversi linguaggi, edè composto da una serie di regole per gestire in confronti tra caratteri dello stesso alfabeto. Si ottiene l’errore di collation conflict quando si tenta di confrontare due campi con collation diversi.
Per ovviare al problema, senza cambiare il collate definito sulla tabella, dobbiamo effettuare un cast su uno dei due campi, come mostrato nell’esempio:
tab1.c1 è un char(2) ed ha collate SQL_Latin1_General_CP1_CI_AS
tab2.c2 è un char(2) edha collate SQL_Latin1_General_CI_AS
La prima query non effettua il cast e va in errore, la seconda viene eseguita con successo
SELECT * FROM tab1 JOIN tab2 ON tab1.c1 = tab2.c2
Cannot resolve collation conflict for equal to operation.
SELECT * FROM tab1 JOIN tab2 ON tab1.c1 COLLATE Latin1_General_CI_AS = tab2.c2
Attenzione al fatto che eventuali indici sulla colonna soggetta al cast non verranno considerati!
Gestione errori in ASP.NET
Come in ogni applicazione, anche nelle applicazioni ASP.NET gli errori possono presentarsi. La domanda è, come gestirli?
Chiaramente la prima cosa da fare in fase di scrittura del codice è utilizzare il construtto Try Catch in ogni parte dell’applicazione a rischio errore/eccezione. Questa modalità di sviluppo è molto importante e permette di poter gestire in modo diverso, tipologie di eccezzioni diverse. Questo però non è il tema del nostro “appunto”, che si focalizza invece su come intercettare gli errori non gestiti.
Per fare questo ASP.NET mette a disposizione 3 soluzioni:
- Il metodo Page_Error di un qualsiasi file aspx
- Il metodo Application_Error del file global.asax
- La sezione customErrors del web.config
L’ordine con cui sono stati elencati è anche l’ordine temporale nel quali le tre modalità vengono richiamate.
- Controllo se sulla pagina che ha generato l’errore è stato implementato il metodo Page_Error (scope : la pagina stessa)
- Controllo se a livello di applicazione è stato implementato il metodo Application_Error (scope : l’intera applicazione)
- Controllo della configurazione della sezione customErrors del web.config
Usare Page_Error
Ipotizziamo di utilizzare l’oggetto log di log4net per loggare.
Il metodo GetLastError della classe Sever ci ritorna l’oggetto Exception della errore che ha generato l’eccezione
Il metodo Server.ClearError() ci da la possibilità di fermare il processo di gestione dell’errore a questo punto (no global.asax, no web.config)
Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Error
Dim log LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Dim objError As Exception = Server.GetLastError.GetBaseException
log.Error(objError.Message, objError)
Server.ClearError()
End Sub
Usare il file global.asax
Questa modalità è identica a quella precedente, cambia soltato lo scope, dalla singola pagina all’intera applicazione.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim log As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Dim objError As Exception = Server.GetLastError.GetBaseException
log.Error(objError.Message, objError)
End Sub
Usare il file web.config
Questo è il blocco di configurazione presente nel file web.config.
<customErrors defaultRedirect=”url” mode=”On|Off|RemoteOnly”>
<error statusCode=”statuscode” redirect=”url”/>
</customErrors>
L’attributo mode puo essere:
- On : il customError è abilitato e sono è specificato il defaultRedirect l’utente vedra la pagina d’errore generica
- Off : il customError è disabilitato, quindi verra mostrata 1 pagina con il dettaglio dell’errore.
- RemoteOnly : il customError è abilitato sono per utenti che accedono dall’esterno. Mentre chi accede dalla stessa macchina vedrà il dettaglio dell’errore
L’attributo defaultRedirect indica la pagina verso la quale fare il redirect in caso d’errore.
E’ inoltre possibile specificare pagine diverse per statusCode HTTP diversi utilizzando l’elemento error dentro customError (vedi l’esempio).
Cosi appare la configurazione di default di web.config alla creazione di un nuova web application.
<customErrors mode=”RemoteOnly”>
Questo è un esempio di una configurazione completa
<customErrors mode=”On” defaultRedirect=”error.htm”>
<error statusCode=”500″ redirect=”error500.aspx?code=500″/>
<error statusCode=”404″ redirect=”filenotfound.aspx”/>
<error statusCode=”403″ redirect=”authorizationfailed.aspx”/>
</customErrors>
Spero sia tutto chiaro, nel caso chiedete pure!
Non mi resta che augurarvi buon error logging!
Insert in tabella con campi IDENTITY
Non so se vi è mai capitato di dover inserire un record su una tabella specificando un campo definito identity.
Vista la natura di un identity (o auto increment), che gestisce la generazione del valore del campo in modo sequenziale, non è possibile di default possibile specificare tale valore.
Esempio
–Creo la tabella
CREATE TABLE [TAB1]
(
[ID_TAB1] INT IDENTITY (1,1) NOT NULL, –Campo Idenity che parte da 1 e si incrementa di 1 ad ogni insert
[NAME] VARCHAR(50) NOT NULL
);
–La seguente insert andrà in errore
INSERT INTO [TAB1] ([ID_TAB1], [NAME]) VALUES (123,’Pippo’);
Messaggio 544, livello 16, stato 1, riga 1
Cannot insert explicit value for identity column in table ‘TAB1′ when IDENTITY_INSERT is set to OFF.
Per effettuare l’inserimento, SQL Server 2005 mette disposizione il seguente una variabile di sistema, IDENTITY_INSERT, da utilizzare come segue.
SET IDENTITY_INSERT [TAB1] ON – Abilita la possibilità di settare un campo identity
INSERT INTO [TAB1] ([ID_TAB1], [NAME]) VALUES (123,’Pippo’);
SET IDENTITY_INSERT [TAB1] OFF — Disabilita la possibilità di settare un campo identity
Stessa cosa per un UPDATE, con l’unica differenza che l’errore in tal caso sara il seguente:
UPDATE [TAB1] SET [ID_TAB1] = 123 WHERE [ID_TAB1] = 1
Messaggio 8102, livello 16, stato 1, riga 1
Cannot update identity column ‘ID_TAB1′.