/[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 119 by william, Sat Jul 14 09:08:55 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    
9  namespace AnywhereTS.DBSupport  namespace AnywhereTS.DBSupport
10  {  {
# Line 21  namespace AnywhereTS.DBSupport Line 22  namespace AnywhereTS.DBSupport
22          DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);          DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);
23          void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);          void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo);
24          List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo);          List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo);
25    
26            DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo);
27            bool RunScript(string strFile, out Exception ErrorInfo);
28      }      }
29      public abstract class DBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter> :      public abstract class DBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter> :
30          IDBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter>          IDBConnector<DBParameter, DBCommand, DBConnection, DBDataAdapter>
# Line 30  namespace AnywhereTS.DBSupport Line 34  namespace AnywhereTS.DBSupport
34          where DBDataAdapter : DbDataAdapter, new()          where DBDataAdapter : DbDataAdapter, new()
35      {      {
36    
37          public DBConnector(string DBServerAddress, string DBServerInstance, string DBDatabase)          public DBConnector(string Server, string Instance, string Database)
38          {          {
39                DBServerAddress = Server;
40                DBServerInstance = Instance;
41                DBDatabase = Database;
42                using (log4net.NDC.Push(string.Format("[Server={0}] [Instance={1}] [Database={2}]", Server, Instance, Database)))
43                {
44                    Logging.DatabaseLog.Debug("Creating DBConnector instance");
45                }
46          }          }
47    
48            public static string GetConnectionString()
49            {
50                return string.Format(@"Data Source={0}\{1};Database={2};Integrated Security=SSPI", DBServerAddress, DBServerInstance, DBDatabase);
51            }
52          protected DBConnection connection;          protected DBConnection connection;
53          protected static string DBServerAddress = "";          #region DBServerAddress, DBServerInstance, DBDatabase
54          protected static string DBServerInstance = "";          internal static string DBServerAddress = "";
55          protected static string DBDatabase = "";          internal static string DBServerInstance = "";
56            internal static string DBDatabase = "";
57            #endregion
58            #region  private string SafeSqlLiteral(string inputSQL)
59          private string SafeSqlLiteral(string inputSQL) { return inputSQL.Replace("'", "''"); }          private string SafeSqlLiteral(string inputSQL) { return inputSQL.Replace("'", "''"); }
60            #endregion
61          #region IDBConnector members          #region IDBConnector members
62          private bool _ConnectionIsOpen;          #region  public virtual bool ConnectionIsOpen
63          public virtual bool ConnectionIsOpen { get { return _ConnectionIsOpen; } protected set { _ConnectionIsOpen = value; } }          public virtual bool ConnectionIsOpen { get; protected set; }
64            #endregion
65            #region public virtual DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)
66            public virtual DBCommand CreateCommandInstance(string command, List<DBParameter> Params, out Exception ErrorInfo)
67            {
68                ErrorInfo = null;
69                try
70                {
71                    command = this.SafeSqlLiteral(command);
72                    DBCommand sqlComm = new DBCommand();
73                    sqlComm.CommandText = command;
74                    sqlComm.Connection = connection;
75                    foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }
76                    return sqlComm;
77                }
78                catch (SqlException ex)
79                {
80                    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())))
81                    {
82                        Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
83                    }
84                    ErrorInfo = ex; throw ErrorInfo;
85                }
86                catch (Exception ex)
87                {
88                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
89                    {
90                        Logging.DatabaseLog.Error(string.Format("Failed to create command instance using command: {0}", command));
91                    }
92                    ErrorInfo = ex; throw ErrorInfo;
93                }
94            }
95            #endregion
96            #region  public virtual void CreateConnection(out Exception ErrorInfo)
97          public virtual void CreateConnection(out Exception ErrorInfo)          public virtual void CreateConnection(out Exception ErrorInfo)
98          {          {
99              ErrorInfo = null;              ErrorInfo = null;
100              try              try
101              {              {
102                  string connetionString = null;                  string connetionString = null;
103                  connetionString = string.Format(@"Data Source={0}\{1};Initial Catalog={2};Integrated Security=SSPI", DBServerAddress, DBServerInstance, DBDatabase);                  connetionString = GetConnectionString();
104                  connection = new DBConnection();                  connection = new DBConnection();
105                  connection.ConnectionString = connetionString;                  connection.ConnectionString = connetionString;
106              }              }
107              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}              catch (SqlException ex)
108              catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }              {
109                    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())))
110                    {
111                        Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
112                    }
113                    ErrorInfo = ex; throw ErrorInfo;
114                }
115                catch (Exception ex)
116                {
117                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
118                    {
119                        Logging.DatabaseLog.Error(string.Format("Failed to create connection to {0} Database", DBDatabase));
120                    }
121                    ErrorInfo = ex; throw ErrorInfo;
122                }
123          }          }
124            #endregion
125            #region public virtual void OpenConnection(out Exception ErrorInfo)
126          public virtual void OpenConnection(out Exception ErrorInfo)          public virtual void OpenConnection(out Exception ErrorInfo)
127          {          {
128              ErrorInfo = null;              ErrorInfo = null;
# Line 65  namespace AnywhereTS.DBSupport Line 133  namespace AnywhereTS.DBSupport
133                  this.ConnectionIsOpen = true;                  this.ConnectionIsOpen = true;
134              }              }
135              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}
136              catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }              catch (SqlException ex)
137                {
138                    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())))
139                    {
140                        Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
141                    }
142                    ErrorInfo = ex; throw ErrorInfo;
143                }
144                catch (Exception ex)
145                {
146                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
147                    {
148                        Logging.DatabaseLog.Error(string.Format("Failed to open connection to {0} Database", DBDatabase));
149                    }
150                    ErrorInfo = ex; throw ErrorInfo;
151                }
152          }          }
153            #endregion
154            #region public virtual void CloseConnection(out Exception ErrorInfo)
155          public virtual void CloseConnection(out Exception ErrorInfo)          public virtual void CloseConnection(out Exception ErrorInfo)
156          {          {
157              ErrorInfo = null;              ErrorInfo = null;
# Line 75  namespace AnywhereTS.DBSupport Line 160  namespace AnywhereTS.DBSupport
160                  if (this.ConnectionIsOpen)                  if (this.ConnectionIsOpen)
161                      connection.Close();                      connection.Close();
162              }              }
163              //catch (SqlException ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex;  throw ErrorInfo;}              catch (SqlException ex)
164              catch (Exception ex) { Console.WriteLine(ex.ToString()); ErrorInfo = ex; throw ErrorInfo; }              {
165                    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())))
166                    {
167                        Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
168                    }
169                    ErrorInfo = ex; throw ErrorInfo;
170                }
171                catch (Exception ex)
172                {
173                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
174                    {
175                        Logging.DatabaseLog.Error(string.Format("Failed to close connection to {0} Database", DBDatabase));
176                    }
177                    ErrorInfo = ex; throw ErrorInfo;
178                }
179          }          }
180            #endregion
181            #region public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
182          public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)          public virtual DbDataReader ExecuteQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
183          {          {
184              ErrorInfo = null;              ErrorInfo = null;
# Line 93  namespace AnywhereTS.DBSupport Line 193  namespace AnywhereTS.DBSupport
193                  DbDataReader r = sqlComm.ExecuteReader();                  DbDataReader r = sqlComm.ExecuteReader();
194                  return r;                  return r;
195              }              }
196              catch (Exception ex) { ErrorInfo = new Exception("Cannot execute query.", ex); }              catch (SqlException ex)
197              return null;              {
198                    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())))
199                    {
200                        Logging.DatabaseLog.Error(string.Format("Failed to execute query: {0}", command));
201                    }
202                    ErrorInfo = ex; throw ErrorInfo;
203                }
204                catch (Exception ex)
205                {
206                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
207                    {
208                        Logging.DatabaseLog.Error(string.Format("Failed to execute querey: {0}", command));
209                    }
210                    ErrorInfo = ex; throw ErrorInfo;
211                }
212          }          }
213            #endregion
214            #region public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
215          public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)          public virtual void ExecuteNonQuery(string command, List<DBParameter> Params, out Exception ErrorInfo)
216          {          {
217              ErrorInfo = null;              ErrorInfo = null;
# Line 109  namespace AnywhereTS.DBSupport Line 225  namespace AnywhereTS.DBSupport
225                  foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }                  foreach (DBParameter p in Params) { sqlComm.Parameters.Add(p); }
226                  sqlComm.ExecuteNonQuery();                  sqlComm.ExecuteNonQuery();
227              }              }
228              catch (Exception ex) { ErrorInfo = new Exception("Cannot execute non-query.", ex); }              catch (SqlException ex)
229                {
230                    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())))
231                    {
232                        Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
233                    }
234                    ErrorInfo = ex; throw ErrorInfo;
235                }
236                catch (Exception ex)
237                {
238                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
239                    {
240                        Logging.DatabaseLog.Error(string.Format("Failed to execute non querey: {0}", command));
241                    }
242                    ErrorInfo = ex; throw ErrorInfo;
243                }
244          }          }
245            #endregion
246            #region public virtual List<string> ExecuteColumnNamesReader(string command, List<DBParameter> Params, out Exception ErrorInfo)
247          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)
248          {          {
249              ErrorInfo = null;              ErrorInfo = null;
# Line 135  namespace AnywhereTS.DBSupport Line 268  namespace AnywhereTS.DBSupport
268                  }                  }
269                  return ColumnNames;                  return ColumnNames;
270              }              }
271              catch (Exception ex) { ErrorInfo = new Exception("Cannot get column names from reader.", ex); }              catch (SqlException ex)
272              return new List<string>();              {
273                    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())))
274                    {
275                        Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
276                    }
277                    ErrorInfo = ex; throw ErrorInfo;
278                }
279                catch (Exception ex)
280                {
281                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
282                    {
283                        Logging.DatabaseLog.Error(string.Format("Failed to get colum names from reader: {0}", command));
284                    }
285                    ErrorInfo = ex; throw ErrorInfo;
286                }
287          }          }
288            #endregion
289            #region public string[] ParseScriptToCommands(string strScript)
290            public string[] ParseScriptToCommands(string strScript)
291            {
292                string[] commands;
293                commands = strScript.Split(new string[] { string.Format("GO{0}", System.Environment.NewLine) }, StringSplitOptions.RemoveEmptyEntries);
294                return commands;
295            }
296            #endregion
297            #region public virtual bool RunScript(string strFile, out Exception ErrorInfo)
298            public bool RunScript(string strFile, out Exception ErrorInfo)
299            {
300                ErrorInfo = null;
301                try
302                {
303                    string[] strCommands;
304                    strCommands = ParseScriptToCommands(strFile);
305                    if (this.ConnectionIsOpen)
306                    {
307                        if (!ClientRunScript(strCommands, out ErrorInfo))
308                        {
309                            return false;
310                        }
311                    }
312                    else
313                    {
314                        Logging.DatabaseLog.Fatal(string.Format("Failed to run script: [database connection is not open] {0}{1}", System.Environment.NewLine, strFile));
315                        return false;
316                    }
317                }
318                catch (SqlException ex)
319                {
320                    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())))
321                    {
322                        Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
323                    }
324                    ErrorInfo = ex;
325                }
326                catch (Exception ex)
327                {
328                    using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
329                    {
330                        Logging.DatabaseLog.Error(string.Format("Failed to run script: {0}{1}", System.Environment.NewLine, strFile));
331                    }
332                    ErrorInfo = ex;
333                }
334                return false;
335            }
336            public abstract bool ClientRunScript(string[] strCommands, out Exception ErrorInfo);
337            #endregion
338          #endregion          #endregion
339    
340          #region IDisposable Members          #region IDisposable Members

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

  ViewVC Help
Powered by ViewVC 1.1.22