/[AnywhereTS-MSSQL]/trunk/AnywhereTS.DBSupport/DBConnector.cs
ViewVC logotype

Diff of /trunk/AnywhereTS.DBSupport/DBConnector.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

--- trunk/AnywhereTS.DBSupport/DBConnector.cs	2012/07/13 20:58:17	84
+++ trunk/AnywhereTS.DBSupport/DBConnector.cs	2012/07/15 03:09:38	132
@@ -4,6 +4,9 @@
 using System.Data.SqlClient;
 using System.Data.Common;
 using System.Data;
+using System.Text.RegularExpressions;
+using System.IO;
+
 
 namespace AnywhereTS.DBSupport
 {
@@ -14,13 +17,16 @@
         where DBDataAdapter : DbDataAdapter, new()
     {
         bool ConnectionIsOpen { get; }
-        void CreateConnection(out Exception ErrorInfo);
+        DBConnection CreateConnection(out Exception ErrorInfo);
         void OpenConnection(out Exception ErrorInfo);
         void CloseConnection(out Exception ErrorInfo);
 
         DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);
         void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);
         List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo);
+
+        //DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo);
+        bool RunScript(string strFile, out Exception ErrorInfo);
     }
     public abstract class DBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter> :
         IDBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter>
@@ -29,38 +35,150 @@
         where DBConnection : DbConnection, new()
         where DBDataAdapter : DbDataAdapter, new()
     {
+
+        public DBConnector(string Server, string Instance, string Database)
+        {
+            DBServerAddress = Server;
+            DBServerInstance = Instance;
+            DBDatabase = Database;
+            using (log4net.NDC.Push(string.Format("[Server={0}] [Instance={1}] [Database={2}]", Server, Instance, Database)))
+            {
+                Logging.DatabaseLog.Debug("Creating DBConnector instance");
+            }
+        }
+
+        public static string GetConnectionString()
+        {
+            return string.Format(@"Data Source={0}\{1};Database={2};Integrated Security=SSPI", DBServerAddress, DBServerInstance, DBDatabase);
+        }
         protected DBConnection connection;
-        private static string Server = "";
-        private static string Database = "";
+        #region DBServerAddress, DBServerInstance, DBDatabase
+        internal static string DBServerAddress = "";
+        internal static string DBServerInstance = "";
+        internal static string DBDatabase = "";
+        #endregion
+        #region  private string SafeSqlLiteral(string inputSQL)
         private string SafeSqlLiteral(string inputSQL) { return inputSQL.Replace("'", "''"); }
+        #endregion
         #region IDBConnector members
-        private bool _ConnectionIsOpen;
-        public virtual bool ConnectionIsOpen { get { return _ConnectionIsOpen; } protected set { _ConnectionIsOpen = value; } }
-        public virtual void CreateConnection(out Exception ErrorInfo)
+        #region  public virtual bool ConnectionIsOpen
+        public virtual bool ConnectionIsOpen { get; protected set; }
+        #endregion
+        #region public virtual DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)
+        //public virtual DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)
+        //{
+        //    ErrorInfo = null;
+        //    try
+        //    {
+        //        command = this.SafeSqlLiteral(command);
+        //        DBCommand sqlComm = new DBCommand();
+        //        sqlComm.CommandText = command;
+        //        sqlComm.Connection = connection;
+        //        foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }
+        //        return sqlComm;
+        //    }
+        //    catch (SqlException ex)
+        //    {
+        //        SqlException e = (ex.GetBaseException() as SqlException);
+        //        using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", e.Number.ToString(), e.Message, System.Environment.NewLine, e.ToString())))
+        //        {
+        //            Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
+        //        }
+        //        ErrorInfo = ex; throw ErrorInfo;
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        Exception e = ex.GetBaseException();
+        //        using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", e.GetType().Name, e.Message, System.Environment.NewLine, e.ToString())))
+        //        {
+        //            Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
+        //        }
+        //        ErrorInfo = ex; throw ErrorInfo;
+        //    }
+        //}
+        #endregion
+        #region  public virtual DBConnection CreateConnection(out Exception ErrorInfo)
+        public virtual DBConnection CreateConnection(out Exception ErrorInfo)
         {
             ErrorInfo = null;
+            string connetionString = string.Empty;
             try
+            {                
+                connetionString = GetConnectionString();
+                using (log4net.NDC.Push(string.Format("connetionString={0}", connetionString)))
+                {
+                    Logging.DatabaseLog.Debug("Creating Connection");
+                    connection = new DBConnection();
+                    connection.ConnectionString = connetionString;
+                    Logging.DatabaseLog.Debug("Created Connection");
+                }
+                return this.connection;
+            }
+            catch (SqlException ex)
             {
-                string connetionString = null;
-                connetionString = string.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI", Server, Database);
-                connection = new DBConnection();
-                connection.ConnectionString = connetionString;
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            catch (Exception ex)
+            {
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
             }
-            //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}
-            catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }
         }
+        #endregion
+        #region public virtual void OpenConnection(out Exception ErrorInfo)
         public virtual void OpenConnection(out Exception ErrorInfo)
         {
             ErrorInfo = null;
+            string connetionString = string.Empty;
             try
             {
                 //this.CloseConnection(out ErrorInfo);
-                connection.Open();
-                this.ConnectionIsOpen = true;
+                connetionString = GetConnectionString();
+                using (log4net.NDC.Push(string.Format("connectionString={0}", connetionString)))
+                {
+                    Logging.DatabaseLog.Debug("Opening Connection");
+                    connection.Open();
+                    this.ConnectionIsOpen = true;
+                    Logging.DatabaseLog.Debug("Opened Connection");
+                }
             }
             //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}
-            catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }
+            catch (SqlException ex)
+            {
+                if (ex.Message.ToLower().Contains(string.Format("Cannot open database").ToLower()))
+                {
+                    ErrorInfo = null;
+                    return;
+                }
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
+                }
+                ErrorInfo = ex; throw ErrorInfo; 
+            }
+            catch (Exception ex)
+            {
+                if (ex.Message.ToLower().Contains(string.Format("Cannot open database").ToLower()))
+                {
+                    ErrorInfo = null;
+                    return;
+                }
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
         }
+        #endregion
+        #region public virtual void CloseConnection(out Exception ErrorInfo)
         public virtual void CloseConnection(out Exception ErrorInfo)
         {
             ErrorInfo = null;
@@ -69,10 +187,25 @@
                 if (this.ConnectionIsOpen)
                     connection.Close();
             }
-            //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}
-            catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }
+            catch (SqlException ex)
+            {
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            catch (Exception ex)
+            {
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
         }
-
+        #endregion
+        #region public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
         public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
         {
             ErrorInfo = null;
@@ -87,9 +220,25 @@
                 DbDataReader r = sqlComm.ExecuteReader();
                 return r;
             }
-            catch (Exception ex) { ErrorInfo = new Exception("Cannot execute query.", ex); }
-            return null;
+            catch (SqlException ex)
+            {
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to execute query: {0}", command));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            catch (Exception ex)
+            {
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to execute querey: {0}", command));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
         }
+        #endregion
+        #region public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
         public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
         {
             ErrorInfo = null;
@@ -103,8 +252,25 @@
                 foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }
                 sqlComm.ExecuteNonQuery();
             }
-            catch (Exception ex) { ErrorInfo = new Exception("Cannot execute non-query.", ex); }
+            catch (SqlException ex)
+            {
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            catch (Exception ex)
+            {
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
         }
+        #endregion
+        #region public virtual List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo)
         public virtual List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo)
         {
             ErrorInfo = null;
@@ -129,10 +295,70 @@
                 }
                 return ColumnNames;
             }
-            catch (Exception ex) { ErrorInfo = new Exception("Cannot get column names from reader.", ex); }
-            return new List<string>();
+            catch (SqlException ex)
+            {
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            catch (Exception ex)
+            {
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
         }
-
+        #endregion
+        #region public string[] ParseScriptToCommands(string strScript)
+     
+        protected abstract bool ClientRunScript(string strFile, out Exception ErrorInfo);
+        #endregion
+        #region public virtual bool RunScript(string strFile, out Exception ErrorInfo)
+        public bool RunScript(string strFile, out Exception ErrorInfo)
+        {
+            ErrorInfo = null;
+            try
+            {
+                if (this.ConnectionIsOpen)
+                {
+                    if (!ClientRunScript(strFile, out ErrorInfo))
+                    {
+                        if(ErrorInfo != null)
+                            throw ErrorInfo;
+                        return false;
+                    }
+                }
+                else
+                {
+                    Logging.DatabaseLog.Fatal(string.Format("Failed to run script: [database connection is not open] {0}{1}", System.Environment.NewLine, strFile));
+                    return false;
+                }
+            }
+            catch (SqlException ex)
+            {
+                SqlException e = (ex.GetBaseException() as SqlException);
+                using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", e.Number.ToString(), e.Message, System.Environment.NewLine, e.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            catch (Exception ex)
+            {
+                Exception e = ex.GetBaseException();
+                using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", e.GetType().Name, e.Message, System.Environment.NewLine, e.ToString())))
+                {
+                    Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
+                }
+                ErrorInfo = ex; throw ErrorInfo;
+            }
+            return false;
+        }
+        #endregion
         #endregion
 
         #region IDisposable Members
@@ -141,7 +367,8 @@
             try
             {
                 Exception ErrorInfo;
-                CloseConnection(out ErrorInfo);
+                if (this.ConnectionIsOpen)
+                    CloseConnection(out ErrorInfo);
             }
             catch
             {

 

  ViewVC Help
Powered by ViewVC 1.1.22