/[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 85 by william, Fri Jul 13 21:10:26 2012 UTC revision 125 by william, Sat Jul 14 11:44:52 2012 UTC
# Line 4  using System.Text; Line 4  using System.Text;
4  using System.Data.SqlClient;  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;
8    using System.IO;
9    
10    
11  namespace AnywhereTS.DBSupport  namespace AnywhereTS.DBSupport
12  {  {
# Line 21  namespace AnywhereTS.DBSupport Line 24  namespace AnywhereTS.DBSupport
24          DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);          DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);
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);
29            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 30  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                DBServerAddress = Server;
42                DBServerInstance = Instance;
43                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 static string DBServerAddress = "";          #region DBServerAddress, DBServerInstance, DBDatabase
56          protected static string DBServerInstance = "";          internal static string DBServerAddress = "";
57          protected static 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          private bool _ConnectionIsOpen;          #region  public virtual bool ConnectionIsOpen
65          public virtual bool ConnectionIsOpen { get { return _ConnectionIsOpen; } protected set { _ConnectionIsOpen = value; } }          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                    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())))
83                    {
84                        Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
85                    }
86                    ErrorInfo = ex; throw ErrorInfo;
87                }
88                catch (Exception ex)
89                {
90                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
91                    {
92                        Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
93                    }
94                    ErrorInfo = ex; throw ErrorInfo;
95                }
96            }
97            #endregion
98            #region  public virtual void CreateConnection(out Exception ErrorInfo)
99          public virtual void CreateConnection(out Exception ErrorInfo)          public virtual void CreateConnection(out Exception ErrorInfo)
100          {          {
101              ErrorInfo = null;              ErrorInfo = null;
102                string connetionString = string.Empty;
103              try              try
104                {                
105                    connetionString = GetConnectionString();
106                    using (log4net.NDC.Push(string.Format("connetionString={0}", connetionString)))
107                    {
108                        Logging.DatabaseLog.Debug("Creating Connection");
109                        connection = new DBConnection();
110                        connection.ConnectionString = connetionString;
111                        Logging.DatabaseLog.Debug("Created Connection");
112                    }
113                }
114                catch (SqlException ex)
115              {              {
116                  string connetionString = null;                  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())))
117                  connetionString = string.Format(@"Data Source={0}\{1};Initial Catalog={2};Integrated Security=SSPI", DBServerAddress, DBServerInstance, DBDatabase);                  {
118                  connection = new DBConnection();                      Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
119                  connection.ConnectionString = connetionString;                  }
120                    ErrorInfo = ex; throw ErrorInfo;
121                }
122                catch (Exception ex)
123                {
124                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
125                    {
126                        Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
127                    }
128                    ErrorInfo = ex; throw ErrorInfo;
129              }              }
             //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}  
             catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }  
130          }          }
131            #endregion
132            #region public virtual void OpenConnection(out Exception ErrorInfo)
133          public virtual void OpenConnection(out Exception ErrorInfo)          public virtual void OpenConnection(out Exception ErrorInfo)
134          {          {
135              ErrorInfo = null;              ErrorInfo = null;
136                string connetionString = string.Empty;
137              try              try
138              {              {
139                  //this.CloseConnection(out ErrorInfo);                  //this.CloseConnection(out ErrorInfo);
140                  connection.Open();                  connetionString = GetConnectionString();
141                  this.ConnectionIsOpen = true;                  using (log4net.NDC.Push(string.Format("connectionString={0}", connetionString)))
142                    {
143                        Logging.DatabaseLog.Debug("Opening Connection");
144                        connection.Open();
145                        this.ConnectionIsOpen = true;
146                        Logging.DatabaseLog.Debug("Opened Connection");
147                    }
148              }              }
149              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}
150              catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }              catch (SqlException ex)
151                {
152                    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())))
153                    {
154                        Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
155                    }
156                    ErrorInfo = ex; throw ErrorInfo;
157                }
158                catch (Exception ex)
159                {
160                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
161                    {
162                        Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
163                    }
164                    ErrorInfo = ex; throw ErrorInfo;
165                }
166          }          }
167            #endregion
168            #region public virtual void CloseConnection(out Exception ErrorInfo)
169          public virtual void CloseConnection(out Exception ErrorInfo)          public virtual void CloseConnection(out Exception ErrorInfo)
170          {          {
171              ErrorInfo = null;              ErrorInfo = null;
# Line 75  namespace AnywhereTS.DBSupport Line 174  namespace AnywhereTS.DBSupport
174                  if (this.ConnectionIsOpen)                  if (this.ConnectionIsOpen)
175                      connection.Close();                      connection.Close();
176              }              }
177              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}              catch (SqlException ex)
178              catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }              {
179                    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())))
180                    {
181                        Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
182                    }
183                    ErrorInfo = ex; throw ErrorInfo;
184                }
185                catch (Exception ex)
186                {
187                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
188                    {
189                        Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
190                    }
191                    ErrorInfo = ex; throw ErrorInfo;
192                }
193          }          }
194            #endregion
195            #region public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
196          public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)          public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
197          {          {
198              ErrorInfo = null;              ErrorInfo = null;
# Line 93  namespace AnywhereTS.DBSupport Line 207  namespace AnywhereTS.DBSupport
207                  DbDataReader r = sqlComm.ExecuteReader();                  DbDataReader r = sqlComm.ExecuteReader();
208                  return r;                  return r;
209              }              }
210              catch (Exception ex) { ErrorInfo = new Exception("Cannot execute query.", ex); }              catch (SqlException ex)
211              return null;              {
212                    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())))
213                    {
214                        Logging.DatabaseLog.Error(string.Format("Failed to execute query: {0}", command));
215                    }
216                    ErrorInfo = ex; throw ErrorInfo;
217                }
218                catch (Exception ex)
219                {
220                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
221                    {
222                        Logging.DatabaseLog.Error(string.Format("Failed to execute querey: {0}", command));
223                    }
224                    ErrorInfo = ex; throw ErrorInfo;
225                }
226          }          }
227            #endregion
228            #region public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
229          public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)          public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
230          {          {
231              ErrorInfo = null;              ErrorInfo = null;
# Line 109  namespace AnywhereTS.DBSupport Line 239  namespace AnywhereTS.DBSupport
239                  foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }                  foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }
240                  sqlComm.ExecuteNonQuery();                  sqlComm.ExecuteNonQuery();
241              }              }
242              catch (Exception ex) { ErrorInfo = new Exception("Cannot execute non-query.", ex); }              catch (SqlException ex)
243                {
244                    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())))
245                    {
246                        Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
247                    }
248                    ErrorInfo = ex; throw ErrorInfo;
249                }
250                catch (Exception ex)
251                {
252                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
253                    {
254                        Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
255                    }
256                    ErrorInfo = ex; throw ErrorInfo;
257                }
258          }          }
259            #endregion
260            #region public virtual List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo)
261          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)
262          {          {
263              ErrorInfo = null;              ErrorInfo = null;
# Line 135  namespace AnywhereTS.DBSupport Line 282  namespace AnywhereTS.DBSupport
282                  }                  }
283                  return ColumnNames;                  return ColumnNames;
284              }              }
285              catch (Exception ex) { ErrorInfo = new Exception("Cannot get column names from reader.", ex); }              catch (SqlException ex)
286              return new List<string>();              {
287                    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())))
288                    {
289                        Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
290                    }
291                    ErrorInfo = ex; throw ErrorInfo;
292                }
293                catch (Exception ex)
294                {
295                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
296                    {
297                        Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
298                    }
299                    ErrorInfo = ex; throw ErrorInfo;
300                }
301          }          }
302            #endregion
303            #region public string[] ParseScriptToCommands(string strScript)
304        
305            protected abstract bool ClientRunScript(string strFile, out Exception ErrorInfo);
306            #endregion
307            #region public virtual bool RunScript(string strFile, out Exception ErrorInfo)
308            public bool RunScript(string strFile, out Exception ErrorInfo)
309            {
310                ErrorInfo = null;
311                try
312                {
313                    if (this.ConnectionIsOpen)
314                    {
315                        if (!ClientRunScript(strFile, out ErrorInfo))
316                        {
317                            if(ErrorInfo != null)
318                                throw ErrorInfo;
319                            return false;
320                        }
321                    }
322                    else
323                    {
324                        Logging.DatabaseLog.Fatal(string.Format("Failed to run script: [database connection is not open] {0}{1}", System.Environment.NewLine, strFile));
325                        return false;
326                    }
327                }
328                catch (SqlException ex)
329                {
330                    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())))
331                    {
332                        Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
333                    }
334                    ErrorInfo = ex;
335                }
336                catch (Exception ex)
337                {
338                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
339                    {
340                        Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
341                    }
342                    ErrorInfo = ex;
343                }
344                return false;
345            }
346            #endregion
347          #endregion          #endregion
348    
349          #region IDisposable Members          #region IDisposable Members

Legend:
Removed from v.85  
changed lines
  Added in v.125

  ViewVC Help
Powered by ViewVC 1.1.22