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

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

  ViewVC Help
Powered by ViewVC 1.1.22