/[AnywhereTS-MSSQL]/trunk/TSAdminTool/Database.cs
ViewVC logotype

Diff of /trunk/TSAdminTool/Database.cs

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

revision 17 by william, Wed Jul 11 16:48:23 2012 UTC revision 41 by william, Thu Jul 12 12:41:04 2012 UTC
# Line 6  using System.Data.SqlClient; Line 6  using System.Data.SqlClient;
6  using System.Windows.Forms;  using System.Windows.Forms;
7  using System.Text.RegularExpressions;  using System.Text.RegularExpressions;
8  using System.Management;  using System.Management;
9    using log4net;
10    
11  namespace AnywhereTS  namespace AnywhereTS
12  {  {
13      class DatabaseSupport      class DatabaseSupport
14      {      {
15            
16          enum VersionCheck          enum VersionCheck
17          {          {
18              Failed = 0, Equal, DatabaseIsMoreNew,              Failed = 0,
19              DatabaseIsOlder, DatabaseNotFound              Equal,
20                DatabaseIsMoreNew,
21                DatabaseIsOlder,
22                //DatabaseNotFound,
23                DatabaseCreated,
24          };          };
25    
26          private SqlConnection sqlCon = new SqlConnection();          private SqlConnection sqlCon = new SqlConnection();
27          private SqlCommand sqlCmd = new SqlCommand();          private SqlCommand sqlCmd = new SqlCommand();
28    
29          const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";          const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";
30            static Version CURRENT_DB_VERSION = new Version(1, 0, 0, 3);
31          public static string InstanceName = Properties.Settings.Default.atsConnectionString.Substring(Properties.Settings.Default.atsConnectionString.IndexOf(@"\"), Properties.Settings.Default.atsConnectionString.IndexOf(@";")).Replace(@"\", "").Replace(@";", "");          public static string InstanceName
32            {
33                get
34                {
35                    bool start = false;
36                    bool end = false;
37                    List<char> pChars = new List<char>();
38                    foreach (char c in Properties.Settings.Default.atsConnectionString.ToCharArray())
39                    {
40                        if (c == '\\') { start = true; continue; }
41                        if (c == ';') { end = true; }
42                        if (end) break;
43                        if (start) { pChars.Add(c); }
44                    }
45                    return new string(pChars.ToArray());
46                }
47            }
48          public bool SetupDatabase()          public bool SetupDatabase()
49          {          {
50              bool bContinue = false;              bool bContinue = false;
   
51              // Create a connection to SQL Server              // Create a connection to SQL Server
52                
53                Logging.ATSAdminLog.Debug("SetupDatabase() called ");
54              try              try
55              {              {                
56                  sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString;                  sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString;                
57                    using (log4net.NDC.Push(string.Format("ConnectionString={0}", Properties.Settings.Default.atsConnectionString)))
58                    {
59                        Logging.ATSAdminLog.Debug("Opening connection to AnywhereTS Database");
60                    }
61                  sqlCon.Open();                  sqlCon.Open();
62              }              }
63              catch (SqlException sql_ex)              catch
64              {              {
65                  MessageBox.Show(string.Format("Fail to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());                  //MessageBox.Show(string.Format("Fail to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
66                  return bContinue;                  //return bContinue;
67                    //bCreateDB = true;
68                    try
69                    {
70                        using (log4net.NDC.Push(string.Format("SQL Statment={0}", Resource1.CreateDatabase.ToString())))
71                        {
72                            Logging.ATSAdminLog.Debug("Creating Database AnywhereTS");
73                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
74                            sqlCon.Open();
75                            RunScript(Resource1.CreateDatabase.ToString());
76                            sqlCon.Close();
77                        }
78                        Logging.ATSAdminLog.Debug("Created Database AnywhereTS");
79    
80                        using (log4net.NDC.Push(string.Format("SQL Statment={0}", Resource1.CreateTables.ToString())))
81                        {
82                            Logging.ATSAdminLog.Debug("Creating Tables in AnywhereTS Database");
83                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
84                            sqlCon.Open();
85                            RunScript(Resource1.CreateTables.ToString());
86                            sqlCon.Close();
87                        }
88                        Logging.ATSAdminLog.Debug("Created Tables in AnywhereTS Database");
89                    }
90                    catch (SqlException sql_ex1)
91                    {
92                        SqlException sql_ex = (sql_ex1.GetBaseException() as SqlException);
93                        MessageBox.Show(string.Format("Failed to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
94    
95                        using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", sql_ex.Number.ToString(), sql_ex.Message, System.Environment.NewLine, sql_ex.ToString())))
96                        {
97                            Logging.ATSAdminLog.Error("Failed to open connection to AnywhereTS Database");
98                        }
99                        return bContinue;
100                    }
101              }              }
102                    
103              // Now that you are connected to Express, check the database versions              // Now that you are connected to Express, check the database versions
   
104              Version databaseVersion; // The current version of the database              Version databaseVersion; // The current version of the database
105                int chkVer = CheckVersion(out databaseVersion);
106              switch (CheckVersion(out databaseVersion))              VersionCheck verChk = (VersionCheck)chkVer;
107                //MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));
108                Logging.ATSAdminLog.DebugFormat("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString());
109                switch (chkVer)
110              {              {
111                  case (int)VersionCheck.Equal:                  case (int)VersionCheck.Equal:
112                      {                      {
# Line 62  namespace AnywhereTS Line 125  namespace AnywhereTS
125                              // Run the apropriate upgdrade script(s)                              // Run the apropriate upgdrade script(s)
126                              case "1.0.0.0":                              case "1.0.0.0":
127                                  {   // Current database is version 1.0.0.0, update to 1.0.0.1                                  {   // Current database is version 1.0.0.0, update to 1.0.0.1
128                                        Logging.ATSAdminLog.DebugFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.0", "1.0.0.1");
129                                      bContinue = RunScript(Resource1.UpdateDatabase1.ToString());                                      bContinue = RunScript(Resource1.UpdateDatabase1.ToString());
130                                        Logging.ATSAdminLog.DebugFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.0", "1.0.0.1");
131                                      goto case "1.0.0.1"; // Continue and upgrade one more step                                      goto case "1.0.0.1"; // Continue and upgrade one more step
132                                  }                                  }
133                              case "1.0.0.1":                              case "1.0.0.1":
134                                  {   // Current database is version 1.0.0.1, update to 1.0.0.2                                  {   // Current database is version 1.0.0.1, update to 1.0.0.2
135                                        Logging.ATSAdminLog.DebugFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.1", "1.0.0.2");
136                                      bContinue = RunScript(Resource1.UpdateDatabase2.ToString());                                      bContinue = RunScript(Resource1.UpdateDatabase2.ToString());
137                                        Logging.ATSAdminLog.DebugFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.2", "1.0.0.2");
138                                      goto case "1.0.0.2"; // Continue and upgrade one more step                                      goto case "1.0.0.2"; // Continue and upgrade one more step
139                                  }                                  }
140                              case "1.0.0.2":                              case "1.0.0.2":
141                                  {   // Current database is version 1.0.0.2, update to 1.0.0.3                                  {   // Current database is version 1.0.0.2, update to 1.0.0.3
142                                        Logging.ATSAdminLog.DebugFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.2", "1.0.0.3");
143                                      bContinue = RunScript(Resource1.UpdateDatabase3.ToString());                                      bContinue = RunScript(Resource1.UpdateDatabase3.ToString());
144                                        Logging.ATSAdminLog.DebugFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.2", "1.0.0.3");
145                                      break;                                      break;
146                                  }                                  }                            
   
                               
147                              default:                              default:
148                                  {                                  {
149                                      MessageBox.Show("Error: Not able to upgrade database (51188)");                                      //MessageBox.Show("Error: Not able to upgrade database (51188)");
150                                        if (databaseVersion == new Version(0, 0, 0, 0))
151                                        {
152                                            string format = string.Format("Database version is {0}, this should have been auto upgraded to {1}", databaseVersion.ToString(), CURRENT_DB_VERSION.ToString());
153                                            Logging.ATSAdminLog.Fatal(format);
154                                            MessageBox.Show(format);
155                                        }
156                                        else
157                                        {
158                                            string format = string.Format("Failed to upgrade Database from version: {0} to version: {1}", databaseVersion.ToString(), CURRENT_DB_VERSION.ToString());
159                                            Logging.ATSAdminLog.Fatal(format);
160                                            MessageBox.Show(format);
161                                        }                                    
162                                      break;                                      break;
163                                  }                                  }
164                          }                          }
# Line 90  namespace AnywhereTS Line 169  namespace AnywhereTS
169                          bContinue = false;                          bContinue = false;
170                          break;                          break;
171                      }                      }
                 case (int)VersionCheck.DatabaseNotFound:  
                     {  
                         //Run the creation script  
                         bContinue = RunScript(Resource1.CreateDatabase.ToString());  
                         if (bContinue)  
                         {  
                             // Set up file access rights for remote desktop users  
                             SetDatabaseRights();  
                         }  
   
                         break;  
                     }  
172                  default:                  default:
173                      {                      {
174                          bContinue = false;                          bContinue = false;
# Line 159  namespace AnywhereTS Line 226  namespace AnywhereTS
226                  string strResult;                  string strResult;
227    
228                  //Verify that the AnywhereTS database exists                  //Verify that the AnywhereTS database exists
229                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);  
230                  strResult = sqlCmd.ExecuteScalar().ToString();                  using (log4net.NDC.Push(string.Format("SQL STATMENT={0}", "select count(*) from master..sysdatabases where name='AnywhereTS'")))
231                                    {
232                        Logging.ATSAdminLog.Debug("Getting Coount of AnywhereTS databases");
233                          sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);
234                            strResult = sqlCmd.ExecuteScalar().ToString();
235                    }
236                   Logging.ATSAdminLog.DebugFormat("AnywhereTS databases Count={0}", strResult);
237    
238                  if (strResult == "0")                  if (strResult == "0")
239                  {                  {
240    
                     return (int)VersionCheck.DatabaseNotFound;  
                 }  
241    
242                        using (log4net.NDC.Push(string.Format("SQL Statment={0}", Resource1.CreateDatabase.ToString())))
243                        {
244                            Logging.ATSAdminLog.Debug("Creating Database AnywhereTS in CheckVersion()");
245                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
246                            sqlCon.Open();
247                            RunScript(Resource1.CreateDatabase.ToString());
248                            sqlCon.Close();
249                        }
250                        Logging.ATSAdminLog.Debug("Created Database AnywhereTS in CheckVersion()");
251    
252                        using (log4net.NDC.Push(string.Format("SQL Statment={0}", Resource1.CreateTables.ToString())))
253                        {
254                            Logging.ATSAdminLog.Debug("Creating Tables in AnywhereTS Database in CheckVersion()");
255                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
256                            sqlCon.Open();
257                            RunScript(Resource1.CreateTables.ToString());
258                            sqlCon.Close();
259                        }
260                        Logging.ATSAdminLog.Debug("Created Tables in AnywhereTS Database in CheckVersion()");
261                    }
262                  try                  try
263                  {                  {
264                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);                      using (log4net.NDC.Push(string.Format("SQL Statment={0}", "SELECT value from AnywhereTS..AppInfo where property='version'")))
265                      strResult = (string)sqlCmd.ExecuteScalar();                      {
266                            Logging.ATSAdminLog.Debug("Gettting AnywhereTS Database Version");
267                            sqlCon.Close();
268                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
269                            sqlCon.Open();
270                            sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
271                            strResult = (string)sqlCmd.ExecuteScalar();
272                            sqlCon.Close();
273                        }
274                        Logging.ATSAdminLog.DebugFormat("AnywhereTS database version={0}", strResult);
275                  }                  }
276                  catch                  catch(SqlException ex)
277                  {   // Assume we could not open the physical file                  {
278                      //Drop the database                      // the database exists, but one or more tables are missing
279                      sqlCmd = new SqlCommand("IF EXISTS(SELECT * FROM sysdatabases WHERE name='AnywhereTS')DROP DATABASE AnywhereTS", sqlCon);                      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())))
280                      strResult = (string)sqlCmd.ExecuteScalar();                      {
281                      return (int)VersionCheck.DatabaseNotFound;                                                  Logging.ATSAdminLog.Error("Failed to get database version");
282                        }
283                        try
284                        {
285    
286                            using (log4net.NDC.Push(string.Format("SQL Statment={0}", Resource1.CreateTables.ToString())))
287                            {
288                                Logging.ATSAdminLog.Debug("Creating Tables in AnywhereTS Database in CheckVersion()");
289                                sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
290                                sqlCon.Open();
291                                RunScript(Resource1.CreateTables.ToString());
292                                sqlCon.Close();
293                            }
294                            Logging.ATSAdminLog.Debug("Created Tables in AnywhereTS Database in CheckVersion()");
295    
296                            using (log4net.NDC.Push(string.Format("SQL Statment={0}", "SELECT value from AnywhereTS..AppInfo where property='version'")))
297                            {
298                                Logging.ATSAdminLog.Debug("Gettting AnywhereTS Database Version");
299                                sqlCon.Close();
300                                sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
301                                sqlCon.Open();
302                                sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
303                                strResult = (string)sqlCmd.ExecuteScalar();
304                                sqlCon.Close();
305                            }
306                            Logging.ATSAdminLog.DebugFormat("AnywhereTS database version={0}", strResult);
307                        }
308                        catch(SqlException ex1)
309                        {
310                            using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex1.Number.ToString(), ex1.Message, System.Environment.NewLine, ex1.ToString())))
311                            {
312                                Logging.ATSAdminLog.Error("Failed to get database version");
313                            }
314                            return (int)VersionCheck.Failed;
315                        }
316                  }                  }
317                  vDb = new Version(strResult);                  vDb = new Version(strResult);
318                        
# Line 197  namespace AnywhereTS Line 331  namespace AnywhereTS
331              catch (SqlException sql_ex)              catch (SqlException sql_ex)
332              {              {
333                  MessageBox.Show(sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());                  MessageBox.Show(sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
334                    using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", sql_ex.Number.ToString(), sql_ex.Message, System.Environment.NewLine, sql_ex.ToString())))
335                    {
336                        Logging.ATSAdminLog.Error("Failed to check database version");
337                    }
338                  return (int)VersionCheck.Failed;                  return (int)VersionCheck.Failed;
339              }              }
340              catch (Exception system_ex)              catch (Exception system_ex)
341              {              {
342                  MessageBox.Show(system_ex.Message.ToString());                  MessageBox.Show(system_ex.Message.ToString());
343                    using (log4net.NDC.Push(string.Format("SqlException: MESSAGE={0}{1}Diagnostics:{1}{2}", system_ex.Message, System.Environment.NewLine, system_ex.ToString())))
344                    {
345                        Logging.ATSAdminLog.Error("Failed to check database version");
346                    }
347                  return (int)VersionCheck.Failed;                  return (int)VersionCheck.Failed;
348              }              }
349          }          }
# Line 213  namespace AnywhereTS Line 355  namespace AnywhereTS
355              return commands;              return commands;
356          }          }
357    
358        
359            [Obsolete("SetDatabaseRights() has been deperecated - user rights are assigned via SQL Server")]
360          public static void SetDatabaseRights()          public static void SetDatabaseRights()
361          {          {
362              try              try

Legend:
Removed from v.17  
changed lines
  Added in v.41

  ViewVC Help
Powered by ViewVC 1.1.22