/[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

revision 87 by william, Fri Jul 13 22:37:40 2012 UTC revision 131 by william, Sun Jul 15 02:55:20 2012 UTC
# Line 5  using System.Data.SqlClient; Line 5  using System.Data.SqlClient;
5  using System.Data.Common;  using System.Data.Common;
6  using System.Data;  using System.Data;
7  using System.Text.RegularExpressions;  using System.Text.RegularExpressions;
8    using System.IO;
9    
10    
11  namespace AnywhereTS.DBSupport  namespace AnywhereTS.DBSupport
12  {  {
# Line 15  namespace AnywhereTS.DBSupport Line 17  namespace AnywhereTS.DBSupport
17          where DBDataAdapter : DbDataAdapter, new()          where DBDataAdapter : DbDataAdapter, new()
18      {      {
19          bool ConnectionIsOpen { get; }          bool ConnectionIsOpen { get; }
20          void CreateConnection(out Exception ErrorInfo);          DBConnection CreateConnection(out Exception ErrorInfo);
21          void OpenConnection(out Exception ErrorInfo);          void OpenConnection(out Exception ErrorInfo);
22          void CloseConnection(out Exception ErrorInfo);          void CloseConnection(out Exception ErrorInfo);
23    
# Line 23  namespace AnywhereTS.DBSupport Line 25  namespace AnywhereTS.DBSupport
25          void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);          void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);
26          List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo);          List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo);
27    
28          DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo);          //DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo);
29          public bool RunScript(string strFile, MsSqlConnector con, out Exception ErrorInfo);          bool RunScript(string strFile, out Exception ErrorInfo);
30      }      }
31      public abstract class DBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter> :      public abstract class DBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter> :
32          IDBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter>          IDBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter>
# Line 34  namespace AnywhereTS.DBSupport Line 36  namespace AnywhereTS.DBSupport
36          where DBDataAdapter : DbDataAdapter, new()          where DBDataAdapter : DbDataAdapter, new()
37      {      {
38    
39          public DBConnector(string DBServerAddress, string DBServerInstance, string DBDatabase)          public DBConnector(string Server, string Instance, string Database)
40          {          {
41              this.DBServerAddress = DBServerAddress;              DBServerAddress = Server;
42              this.DBServerInstance = DBServerInstance;              DBServerInstance = Instance;
43              this.DBDatabase = DBDatabase;              DBDatabase = Database;
44                using (log4net.NDC.Push(string.Format("[Server={0}] [Instance={1}] [Database={2}]", Server, Instance, Database)))
45                {
46                    Logging.DatabaseLog.Debug("Creating DBConnector instance");
47                }
48          }          }
49    
50            public static string GetConnectionString()
51            {
52                return string.Format(@"Data Source={0}\{1};Database={2};Integrated Security=SSPI", DBServerAddress, DBServerInstance, DBDatabase);
53            }
54          protected DBConnection connection;          protected DBConnection connection;
55          protected string DBServerAddress = "";          #region DBServerAddress, DBServerInstance, DBDatabase
56          protected string DBServerInstance = "";          internal static string DBServerAddress = "";
57          protected string DBDatabase = "";          internal static string DBServerInstance = "";
58            internal static string DBDatabase = "";
59            #endregion
60            #region  private string SafeSqlLiteral(string inputSQL)
61          private string SafeSqlLiteral(string inputSQL) { return inputSQL.Replace("'", "''"); }          private string SafeSqlLiteral(string inputSQL) { return inputSQL.Replace("'", "''"); }
62            #endregion
63          #region IDBConnector members          #region IDBConnector members
64          public DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)          #region  public virtual bool ConnectionIsOpen
65            public virtual bool ConnectionIsOpen { get; protected set; }
66            #endregion
67            #region public virtual DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)
68            //public virtual DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)
69            //{
70            //    ErrorInfo = null;
71            //    try
72            //    {
73            //        command = this.SafeSqlLiteral(command);
74            //        DBCommand sqlComm = new DBCommand();
75            //        sqlComm.CommandText = command;
76            //        sqlComm.Connection = connection;
77            //        foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }
78            //        return sqlComm;
79            //    }
80            //    catch (SqlException ex)
81            //    {
82            //        SqlException e = (ex.GetBaseException() as SqlException);
83            //        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())))
84            //        {
85            //            Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
86            //        }
87            //        ErrorInfo = ex; throw ErrorInfo;
88            //    }
89            //    catch (Exception ex)
90            //    {
91            //        Exception e = ex.GetBaseException();
92            //        using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", e.GetType().Name, e.Message, System.Environment.NewLine, e.ToString())))
93            //        {
94            //            Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
95            //        }
96            //        ErrorInfo = ex; throw ErrorInfo;
97            //    }
98            //}
99            #endregion
100            #region  public virtual DBConnection CreateConnection(out Exception ErrorInfo)
101            public virtual DBConnection CreateConnection(out Exception ErrorInfo)
102          {          {
103              ErrorInfo = null;              ErrorInfo = null;
104                string connetionString = string.Empty;
105              try              try
106              {              {                
107                  command = this.SafeSqlLiteral(command);                  connetionString = GetConnectionString();
108                  DBCommand sqlComm = new DBCommand();                  using (log4net.NDC.Push(string.Format("connetionString={0}", connetionString)))
109                  sqlComm.CommandText = command;                  {
110                  sqlComm.Connection = connection;                      Logging.DatabaseLog.Debug("Creating Connection");
111                  foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }                      connection = new DBConnection();
112                  return sqlComm;                      connection.ConnectionString = connetionString;
113              }                      Logging.DatabaseLog.Debug("Created Connection");
             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 create command instance using command: {0}", command));  
114                  }                  }
115                  ErrorInfo = ex; throw ErrorInfo;                  return this.connection;
             }  
             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 command instance using command: {0}", command));  
                 }  
                 ErrorInfo = ex; throw ErrorInfo;  
             }  
         }  
         private bool _ConnectionIsOpen;  
         public virtual bool ConnectionIsOpen { get { return _ConnectionIsOpen; } protected set { _ConnectionIsOpen = value; } }  
         public virtual void CreateConnection(out Exception ErrorInfo)  
         {  
             ErrorInfo = null;  
             try  
             {  
                 string connetionString = null;  
                 connetionString = string.Format(@"Data Source={0}\{1};Initial Catalog={2};Integrated Security=SSPI", DBServerAddress, DBServerInstance, DBDatabase);  
                 connection = new DBConnection();  
                 connection.ConnectionString = connetionString;  
116              }              }
117              catch (SqlException ex)              catch (SqlException ex)
118              {              {
# Line 103  namespace AnywhereTS.DBSupport Line 129  namespace AnywhereTS.DBSupport
129                      Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));                      Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
130                  }                  }
131                  ErrorInfo = ex; throw ErrorInfo;                  ErrorInfo = ex; throw ErrorInfo;
132              }              }
133          }          }
134            #endregion
135            #region public virtual void OpenConnection(out Exception ErrorInfo)
136          public virtual void OpenConnection(out Exception ErrorInfo)          public virtual void OpenConnection(out Exception ErrorInfo)
137          {          {
138              ErrorInfo = null;              ErrorInfo = null;
139                string connetionString = string.Empty;
140              try              try
141              {              {
142                  //this.CloseConnection(out ErrorInfo);                  //this.CloseConnection(out ErrorInfo);
143                  connection.Open();                  connetionString = GetConnectionString();
144                  this.ConnectionIsOpen = true;                  using (log4net.NDC.Push(string.Format("connectionString={0}", connetionString)))
145                    {
146                        Logging.DatabaseLog.Debug("Opening Connection");
147                        connection.Open();
148                        this.ConnectionIsOpen = true;
149                        Logging.DatabaseLog.Debug("Opened Connection");
150                    }
151              }              }
152              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}
153              catch (SqlException ex)              catch (SqlException ex)
# Line 130  namespace AnywhereTS.DBSupport Line 165  namespace AnywhereTS.DBSupport
165                      Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));                      Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
166                  }                  }
167                  ErrorInfo = ex; throw ErrorInfo;                  ErrorInfo = ex; throw ErrorInfo;
168              }              }
169          }          }
170            #endregion
171            #region public virtual void CloseConnection(out Exception ErrorInfo)
172          public virtual void CloseConnection(out Exception ErrorInfo)          public virtual void CloseConnection(out Exception ErrorInfo)
173          {          {
174              ErrorInfo = null;              ErrorInfo = null;
# Line 155  namespace AnywhereTS.DBSupport Line 192  namespace AnywhereTS.DBSupport
192                      Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));                      Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
193                  }                  }
194                  ErrorInfo = ex; throw ErrorInfo;                  ErrorInfo = ex; throw ErrorInfo;
195              }              }
196          }          }
197            #endregion
198            #region public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
199          public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)          public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
200          {          {
201              ErrorInfo = null;              ErrorInfo = null;
# Line 187  namespace AnywhereTS.DBSupport Line 225  namespace AnywhereTS.DBSupport
225                      Logging.DatabaseLog.Error(string.Format("Failed to execute querey: {0}", command));                      Logging.DatabaseLog.Error(string.Format("Failed to execute querey: {0}", command));
226                  }                  }
227                  ErrorInfo = ex; throw ErrorInfo;                  ErrorInfo = ex; throw ErrorInfo;
228              }              }
229          }          }
230            #endregion
231            #region public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
232          public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)          public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
233          {          {
234              ErrorInfo = null;              ErrorInfo = null;
# Line 217  namespace AnywhereTS.DBSupport Line 257  namespace AnywhereTS.DBSupport
257                      Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));                      Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
258                  }                  }
259                  ErrorInfo = ex; throw ErrorInfo;                  ErrorInfo = ex; throw ErrorInfo;
260              }                  }
261          }          }
262            #endregion
263            #region public virtual List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo)
264          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)
265          {          {
266              ErrorInfo = null;              ErrorInfo = null;
# Line 258  namespace AnywhereTS.DBSupport Line 300  namespace AnywhereTS.DBSupport
300                      Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));                      Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
301                  }                  }
302                  ErrorInfo = ex; throw ErrorInfo;                  ErrorInfo = ex; throw ErrorInfo;
303              }                          }
         }  
         public string[] ParseScriptToCommands(string strScript)  
         {  
             string[] commands;  
             commands = Regex.Split(strScript, "GO\r\n", RegexOptions.IgnoreCase);  
             return commands;  
304          }          }
305          public virtual bool RunScript(string strFile, out Exception ErrorInfo)          #endregion
306            #region public string[] ParseScriptToCommands(string strScript)
307        
308            protected abstract bool ClientRunScript(string strFile, out Exception ErrorInfo);
309            #endregion
310            #region public virtual bool RunScript(string strFile, out Exception ErrorInfo)
311            public bool RunScript(string strFile, out Exception ErrorInfo)
312          {          {
313              ErrorInfo = null;              ErrorInfo = null;
314              try              try
315              {              {
                 string[] strCommands;  
                 strCommands = ParseScriptToCommands(strFile);  
316                  if (this.ConnectionIsOpen)                  if (this.ConnectionIsOpen)
317                  {                  {
318                      foreach (string strCmd in strCommands)                      if (!ClientRunScript(strFile, out ErrorInfo))
319                      {                      {
320                          if (strCmd.Length > 0)                          if(ErrorInfo != null)
321                          {                              throw ErrorInfo;
322                              // Substitute database directory with the decided one.                          return false;
                             DBCommand command = this.CreateCommandInstance(strCmd, new List<DBParameter>(), out ErrorInfo);  
                             command.ExecuteNonQuery();  
                         }  
323                      }                      }
                     return true;  
324                  }                  }
325                  else                  else
326                  {                  {
327                      Logging.ATSAdminLog.Fatal(string.Format("Failed to run script: [database connection is not open] {0}{1}", System.Environment.NewLine, strFile));                      Logging.DatabaseLog.Fatal(string.Format("Failed to run script: [database connection is not open] {0}{1}", System.Environment.NewLine, strFile));
328                      return false;                      return false;
329                  }                  }
330              }              }
331              catch (SqlException ex)              catch (SqlException ex)
332              {              {
333                  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())))                  SqlException e = (ex.GetBaseException() as SqlException);
334                    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())))
335                  {                  {
336                      Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));                      Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
337                  }                  }
338                  ErrorInfo = ex;                  ErrorInfo = ex; throw ErrorInfo;
339              }              }
340              catch (Exception ex)              catch (Exception ex)
341              {              {
342                  using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))                  Exception e = ex.GetBaseException();
343                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", e.GetType().Name, e.Message, System.Environment.NewLine, e.ToString())))
344                  {                  {
345                      Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));                      Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
346                  }                  }
347                  ErrorInfo = ex;                  ErrorInfo = ex; throw ErrorInfo;
348              }              }
349              return false;              return false;
350          }          }
351          #endregion          #endregion
352            #endregion
353    
354          #region IDisposable Members          #region IDisposable Members
355          public virtual void Dispose()          public virtual void Dispose()
# Line 318  namespace AnywhereTS.DBSupport Line 357  namespace AnywhereTS.DBSupport
357              try              try
358              {              {
359                  Exception ErrorInfo;                  Exception ErrorInfo;
360                  CloseConnection(out ErrorInfo);                  if (this.ConnectionIsOpen)
361                        CloseConnection(out ErrorInfo);
362              }              }
363              catch              catch
364              {              {

Legend:
Removed from v.87  
changed lines
  Added in v.131

  ViewVC Help
Powered by ViewVC 1.1.22