-
using System;
-
using System.Collections.Generic;
-
using System.Data.SqlClient;
-
using System.Collections.Specialized;
-
-
namespace CustomException
-
{
-
public class CustomEx : System.SystemException
-
{
-
private static SqlConnection _conn;
-
private static SqlCommand _cmd;
-
-
private DateTime _date;
-
private string _message;
-
private string _webAddr;
-
private string _webAddrIP;
-
private string _userIP;
-
private string _reason;
-
private List<string> _urlAddr;
-
private List<QueryStringValue> _urlQueries;
-
-
public CustomEx()
-
{
-
_conn
= new SqlConnection
();
-
_conn.ConnectionString = "Server=YourServer;Database=ExceptionDB;User
-
-
Id=YourUser;Password=YourPassWord;Trusted_Connection=False;";
-
-
_cmd.Connection = _conn;
-
}
-
-
public CustomEx(string errorMessage,string errorReason,string webSiteIP,string userIP,string[]
-
-
urlSegments,NameValueCollection queryCollection,string webAddr):this()
-
{
-
this._date = DateTime.Now;
-
this._message = errorMessage;
-
this._reason = errorReason;
-
-
/*
-
SERVER_NAME www.creacoder.com
-
LOCAL_ADDR 99.88.77.1907 gibi (:
-
REMOTE_ADDR user ip
-
*/
-
-
_webAddr = webAddr;
-
_webAddrIP = webSiteIP;
-
_userIP = userIP;
-
-
_urlAddr
= new List
<
;string
>
;();
-
for (int i = 0; i < urlSegments.Length; i++)
-
this._urlAddr.Add(urlSegments[i]);
-
-
if (queryCollection.Count > 0)
-
{
-
this._urlQueries
= new List
<
;QueryStringValue
>
;();
-
for (int i = 0; i < queryCollection.Count; i++)
-
_urlQueries.
Add(new QueryStringValue
()
-
{
-
Key = queryCollection.Keys[i],
-
Value = queryCollection[i]
-
});
-
}
-
}
-
-
public void RegError()
-
{
-
-
_conn.Open();
-
-
// Step 1 => Record Error Message , if not exists on ErrorMessages table
-
#region MyRegion
-
_cmd.CommandText = "select Count(Id) from ErrorMessages where ErrorMessage = @m";
-
_cmd.Parameters.Add("@m", System.Data.SqlDbType.NVarChar,50).Value = _message;
-
int messageCount = (int)_cmd.ExecuteScalar();
-
if (messageCount < 1)
-
{
-
// message not exists , new record
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into ErrorMessages (ErrorMessage) values (@m)";
-
_cmd.Parameters.Add("@m", System.Data.SqlDbType.NVarChar).Value = _message;
-
_cmd.ExecuteNonQuery();
-
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select top 1 Id from ErrorMessages order by Id DESC";
-
e.ErrorID = (int)_cmd.ExecuteScalar();
-
}
-
else
-
{
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from ErrorMessages where ErrorMessage=@m";
-
_cmd.Parameters.Add("@m", System.Data.SqlDbType.NVarChar).Value = _message;
-
e.ErrorID = (int)_cmd.ExecuteScalar();
-
}
-
#endregion
-
-
// Step 2 => Take Date
-
#region MyRegion
-
e.ErrorDate = _date;
-
#endregion
-
-
// Step 3 => Take Web Address , ex => www.creacoder.com
-
#region MyRegion
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Count(Id) from WebSites where WebSite = @site and IPAddr = @ip";
-
_cmd.Parameters.Add("@site", System.Data.SqlDbType.NVarChar).Value = _webAddr;
-
_cmd.Parameters.Add("@ip", System.Data.SqlDbType.NVarChar).Value = _webAddrIP;
-
int siteCount = (int)_cmd.ExecuteScalar();
-
-
if (siteCount < 1)
-
{
-
// web site not exists , new record
-
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebSites (WebSite,IPAddr) values (@p1,@p2)";
-
_cmd.Parameters.Add("@p1", System.Data.SqlDbType.NVarChar).Value = _webAddr;
-
_cmd.Parameters.Add("@p2", System.Data.SqlDbType.NVarChar).Value = _webAddrIP;
-
_cmd.ExecuteNonQuery();
-
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select top 1 Id from WebSites order by Id DESC";
-
e.ErrorWebID = (int)_cmd.ExecuteScalar();
-
}
-
else
-
{
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from WebSites where WebSite = @site and IPAddr = @ip";
-
_cmd.Parameters.Add("@site", System.Data.SqlDbType.NVarChar).Value = _webAddr;
-
_cmd.Parameters.Add("@ip", System.Data.SqlDbType.NVarChar).Value = _webAddrIP;
-
e.ErrorWebID = (int)_cmd.ExecuteScalar();
-
}
-
#endregion
-
-
// Step 4 => WebSiteUrl
-
#region MyRegion
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebSitesUrls (WebSiteID) values (@id)";
-
_cmd.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = e.ErrorWebID;
-
_cmd.ExecuteNonQuery();
-
-
// Url’s web site id recorded…
-
// Step 5 => this web url’s segments’ recording… so take the last url id
-
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select top 1 Id from WebSitesUrls order by Id DESC";
-
e.ErrorUrlID = (int)_cmd.ExecuteScalar();
-
#endregion
-
-
// Step 5 => record segments…
-
#region MyRegion
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebSiteUrlSegments (Segment,UrlID) values (@p1,@p2)";
-
_cmd.Parameters.Add("@p1", System.Data.SqlDbType.NVarChar);
-
_cmd.Parameters.Add("@p2", System.Data.SqlDbType.Int);
-
-
foreach (string seg in this._urlAddr)
-
{
-
_cmd.Parameters["@p1"].Value = seg;
-
_cmd.Parameters["@p2"].Value = e.ErrorUrlID;
-
_cmd.ExecuteNonQuery();
-
}
-
#endregion
-
-
// Step 6 => recording query string parameters… if exists
-
#region MyRegion
-
if (_urlQueries != null && _urlQueries.Count > 0)
-
{
-
// record keys,,,
-
foreach (QueryStringValue key in _urlQueries)
-
{
-
QueryString q
= new QueryString
();
-
#region Insert Key,Value and take KeyID and ValueID
-
// take KeyID
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Count(Id) from WebQueryKeyCollection where QueryKey=@key";
-
_cmd.Parameters.Add("@key", System.Data.SqlDbType.NVarChar).Value = key.Key;
-
if (((int)_cmd.ExecuteScalar()) < 1)
-
{
-
// not exists , record the key
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebQueryKeyCollection (QueryKey) values (@key)";
-
_cmd.Parameters.Add("@key", System.Data.SqlDbType.NVarChar).Value = key.Key;
-
_cmd.ExecuteNonQuery();
-
-
// take last key id
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select top 1 Id from WebQueryKeyCollection order by Id DESC";
-
q.KeyID = (int)_cmd.ExecuteScalar();
-
}
-
else
-
{
-
// take key’s id
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from WebQueryKeyCollection where QueryKey=@key";
-
_cmd.Parameters.Add("@key", System.Data.SqlDbType.NVarChar).Value = key;
-
q.KeyID = (int)_cmd.ExecuteScalar();
-
}
-
-
// take Value ID
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Count(Id) from WebQueryValueCollection where QueryValue=@value";
-
_cmd.Parameters.Add("@value", System.Data.SqlDbType.NVarChar).Value = key.Value;
-
if (((int)_cmd.ExecuteScalar()) < 1)
-
{
-
// not exists , record the key
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebQueryValueCollection (QueryValue) values (@value)";
-
_cmd.Parameters.Add("@value", System.Data.SqlDbType.NVarChar).Value = key.Value;
-
_cmd.ExecuteNonQuery();
-
-
// take last key id
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select top 1 Id from WebQueryValueCollection order by Id DESC";
-
q.ValueID = (int)_cmd.ExecuteScalar();
-
}
-
else
-
{
-
// take value’s id
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from WebQueryValueCollection where QueryValue=@value";
-
_cmd.Parameters.Add("@value", System.Data.SqlDbType.NVarChar).Value = key;
-
q.ValueID = (int)_cmd.ExecuteScalar();
-
}
-
#endregion
-
-
#region Insert QueryID,ValueID,ErrorID
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebSiteQuerys (QueryStringKey,QueryStringValue,ErrorID) values
-
-
(@p1,@p2,@p3)";
-
_cmd.Parameters.Add("@p1", System.Data.SqlDbType.Int).Value = q.KeyID;
-
_cmd.Parameters.Add("@p2", System.Data.SqlDbType.Int).Value = q.ValueID;
-
_cmd.Parameters.Add("@p3", System.Data.SqlDbType.Int).Value = e.ErrorID;
-
_cmd.ExecuteNonQuery();
-
#endregion
-
}
-
_cmd.Parameters.Clear();
-
}
-
#endregion
-
-
// Step 7 => record ip address
-
#region MyRegion
-
_cmd.CommandText = "select Count(Id) from WebErrorIPList where IP=@ip";
-
_cmd.Parameters.Add("@ip", System.Data.SqlDbType.NVarChar).Value = this._webAddrIP;
-
int ipCount = (int)_cmd.ExecuteScalar();
-
-
int iPID = 0;
-
if (ipCount < 1)
-
{
-
// ip not exists , record it
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebErrorIPList (IP) values (@ip)";
-
_cmd.Parameters.Add("@ip", System.Data.SqlDbType.NVarChar).Value = this._webAddrIP;
-
_cmd.ExecuteNonQuery();
-
-
// take last ip id
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from WebErrorIPList order by Id DESC";
-
iPID = (int)_cmd.ExecuteScalar();
-
}
-
else
-
{
-
// exitst that ip , take its
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from WebErrorIPList where IP=@ip";
-
_cmd.Parameters.Add("@ip", System.Data.SqlDbType.NVarChar).Value = this._webAddrIP;
-
iPID = (int)_cmd.ExecuteScalar();
-
}
-
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebErrorIP (IP,ErrorID) values (@ip,@err)";
-
_cmd.Parameters.Add("@ip", System.Data.SqlDbType.Int).Value = iPID;
-
_cmd.Parameters.Add("@err", System.Data.SqlDbType.Int).Value = e.ErrorID;
-
_cmd.ExecuteNonQuery();
-
#endregion
-
-
// Step 8 => record reason
-
#region MyRegion
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Count(Id) from ErrorReasons where Reason = @r";
-
_cmd.Parameters.Add("@r", System.Data.SqlDbType.NVarChar).Value = _reason;
-
int reasonCount = (int)_cmd.ExecuteScalar();
-
if (reasonCount < 1)
-
{
-
// reason not exists , record it
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into ErrorReasons (Reason) values (@r)";
-
_cmd.Parameters.Add("@r", System.Data.SqlDbType.NVarChar).Value = _reason;
-
_cmd.ExecuteNonQuery();
-
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select top 1 Id from ErrorReasons order by Id DESC";
-
e.ErrorReasonID = (int)_cmd.ExecuteScalar();
-
}
-
else
-
{
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "select Id from ErrorReasons where Reason = @r";
-
_cmd.Parameters.Add("@r", System.Data.SqlDbType.NVarChar).Value = _reason;
-
e.ErrorReasonID = (int)_cmd.ExecuteScalar();
-
}
-
#endregion
-
-
// RECORD ERROR
-
#region MyRegion
-
_cmd.Parameters.Clear();
-
_cmd.CommandText = "insert into WebErrors (ErrorID,ErrorWebID,ErrorDate,ErrorURL,ErrorReasonID) values
-
-
(@p1,@p2,@p3,@p4,@p5)";
-
_cmd.Parameters.Add("@p1", System.Data.SqlDbType.Int).Value = e.ErrorID;
-
_cmd.Parameters.Add("@p2", System.Data.SqlDbType.Int).Value = e.ErrorWebID;
-
_cmd.Parameters.Add("@p3", System.Data.SqlDbType.DateTime).Value = e.ErrorDate;
-
_cmd.Parameters.Add("@p4", System.Data.SqlDbType.Int).Value = e.ErrorUrlID;
-
_cmd.Parameters.Add("@p5", System.Data.SqlDbType.Int).Value = e.ErrorReasonID;
-
_cmd.ExecuteNonQuery();
-
#endregion
-
-
_conn.Close();
-
_cmd.Parameters.Clear();
-
_conn = null;
-
_cmd = null;
-
}
-
}
-
-
public class Error
-
{
-
public int ErrorID { get; set; }
-
public DateTime ErrorDate { get; set; }
-
public int ErrorWebID { get; set; }
-
public int ErrorUrlID { get; set; }
-
public int ErrorReasonID { get; set; }
-
}
-
public class QueryStringValue
-
{
-
public string Key { get; set; }
-
public string Value { get; set; }
-
}
-
public class QueryString
-
{
-
public int KeyID { get; set; }
-
public int ValueID { get; set; }
-
}
-
}