/[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 10 by william, Wed Jul 11 16:01:40 2012 UTC revision 21 by william, Wed Jul 11 19:34:51 2012 UTC
# Line 13  namespace AnywhereTS Line 13  namespace AnywhereTS
13      {      {
14          enum VersionCheck          enum VersionCheck
15          {          {
16              Failed = 0, Equal, DatabaseIsMoreNew,              Failed = 0,
17              DatabaseIsOlder, DatabaseNotFound              Equal,
18                DatabaseIsMoreNew,
19                DatabaseIsOlder,
20                //DatabaseNotFound,
21                DatabaseCreated,
22          };          };
23    
24          private SqlConnection sqlCon = new SqlConnection();          private SqlConnection sqlCon = new SqlConnection();
25          private SqlCommand sqlCmd = new SqlCommand();          private SqlCommand sqlCmd = new SqlCommand();
26    
27          const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";          const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";
28            
29            public static string InstanceName
30            {
31                get
32                {
33                    bool start = false;
34                    bool end = false;
35                    List<char> pChars = new List<char>();
36                    foreach (char c in Properties.Settings.Default.atsConnectionString.ToCharArray())
37                    {
38                        if (c == '\\') { start = true; continue; }
39                        if (c == ';') { end = true; }
40                        if (end) break;
41                        if (start) { pChars.Add(c); }
42                    }
43                    return new string(pChars.ToArray());
44                }
45            }
46          public bool SetupDatabase()          public bool SetupDatabase()
47          {          {
48              bool bContinue = false;              bool bContinue = false;
   
49              // Create a connection to SQL Server              // Create a connection to SQL Server
50              try              try
51              {              {
52                  sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString;                  sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString;
53                  sqlCon.Open();                  sqlCon.Open();
54              }              }
55              catch (SqlException sql_ex)              catch
56              {              {
57                  MessageBox.Show("Fail to connect to SQL Server Express\n" + 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());
58                  return bContinue;                  //return bContinue;
59                    //bCreateDB = true;
60                    try
61                    {
62                        try
63                        {
64                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
65                            sqlCon.Open();
66                            RunScript("DROP AnywhereTS");
67                            sqlCon.Close();
68                        }
69                        catch { }
70    
71                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
72                        sqlCon.Open();
73                        RunScript(Resource1.CreateDatabase.ToString());
74                        sqlCon.Close();
75                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
76                        sqlCon.Open();
77                    }
78                    catch (SqlException sql_ex1)
79                    {
80                        SqlException sql_ex = (sql_ex1.GetBaseException() as SqlException);
81                        MessageBox.Show(string.Format("Failed to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
82                        return bContinue;
83                    }
84              }              }
85                    
86              // Now that you are connected to Express, check the database versions              // Now that you are connected to Express, check the database versions
   
87              Version databaseVersion; // The current version of the database              Version databaseVersion; // The current version of the database
88                int chkVer = CheckVersion(out databaseVersion);
89              switch (CheckVersion(out databaseVersion))              VersionCheck verChk = (VersionCheck)chkVer;
90                MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));
91                switch (chkVer)
92              {              {
93                  case (int)VersionCheck.Equal:                  case (int)VersionCheck.Equal:
94                      {                      {
# Line 89  namespace AnywhereTS Line 135  namespace AnywhereTS
135                          bContinue = false;                          bContinue = false;
136                          break;                          break;
137                      }                      }
                 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;  
                     }  
138                  default:                  default:
139                      {                      {
140                          bContinue = false;                          bContinue = false;
# Line 160  namespace AnywhereTS Line 194  namespace AnywhereTS
194                  //Verify that the AnywhereTS database exists                  //Verify that the AnywhereTS database exists
195                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);
196                  strResult = sqlCmd.ExecuteScalar().ToString();                  strResult = sqlCmd.ExecuteScalar().ToString();
197                    
198                  if (strResult == "0")                  if (strResult == "0")
199                  {                  {
200    
201                      return (int)VersionCheck.DatabaseNotFound;                      sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
202                        sqlCon.Open();
203                        RunScript(Resource1.CreateDatabase.ToString());
204                        sqlCon.Close();
205                    }
206                    else
207                    {
208                        sqlCon.Close();
209                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
210                        sqlCon.Open();
211                        RunScript("DROP DATABASE AnywhereTS");
212                        sqlCon.Close();
213                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
214                        sqlCon.Open();
215                        RunScript(Resource1.CreateDatabase.ToString());
216                        sqlCon.Close();
217                  }                  }
218    
219                  try                  try
220                  {                  {
221                        sqlCon.Close();
222                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
223                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
224                      strResult = (string)sqlCmd.ExecuteScalar();                      strResult = (string)sqlCmd.ExecuteScalar();
225                  }                  }
226                  catch                  catch
227                  {   // Assume we could not open the physical file                  {
228                      //Drop the database                      // database exists, but does not have one or more expected tables
229                      sqlCmd = new SqlCommand("IF EXISTS(SELECT * FROM sysdatabases WHERE name='AnywhereTS')DROP DATABASE AnywhereTS", sqlCon);                      try
230                      strResult = (string)sqlCmd.ExecuteScalar();                      {
231                      return (int)VersionCheck.DatabaseNotFound;                                                  sqlCon.Close();
232                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
233                            sqlCon.Open();
234                            RunScript("DROP DATABASE AnywhereTS");
235                            sqlCon.Close();
236                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
237                            sqlCmd.Connection = sqlCon;
238                            sqlCmd.CommandText = Resource1.CreateDatabase.ToString();
239                            sqlCmd.ExecuteNonQuery();
240                            sqlCon.Close();
241    
242                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
243                            sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
244                            strResult = (string)sqlCmd.ExecuteScalar();
245                        }
246                        catch { return (int)VersionCheck.Failed; }
247                  }                  }
248                  vDb = new Version(strResult);                  vDb = new Version(strResult);
249                        
# Line 212  namespace AnywhereTS Line 278  namespace AnywhereTS
278              return commands;              return commands;
279          }          }
280    
281        
282            [Obsolete("SetDatabaseRights() has been deperecated - user rights are assigned via SQL Server")]
283          public static void SetDatabaseRights()          public static void SetDatabaseRights()
284          {          {
285              try              try
# Line 265  namespace AnywhereTS Line 332  namespace AnywhereTS
332              }              }
333              catch              catch
334              {              {
335                  MessageBox.Show("Error, could not configure SQL Browser service (24888). Please check that SQL Server Express is intalled and that you are logged in with sufficient rights to configure services. Then retry the operation.");                  MessageBox.Show("Error, could not configure SQL Browser service (24888). Please check that SQL Server is intalled and that you are logged in with sufficient rights to configure services. Then retry the operation.");
336              }              }
337          }          }
338    
# Line 284  namespace AnywhereTS Line 351  namespace AnywhereTS
351              {              {
352                  prot.Get();                  prot.Get();
353                  if ((string)prot.GetPropertyValue("ProtocolName") == "Np" &&  //Named pipes                  if ((string)prot.GetPropertyValue("ProtocolName") == "Np" &&  //Named pipes
354                      (string)prot.GetPropertyValue("InstanceName") == "SQLEXPRESS")                      (string)prot.GetPropertyValue("InstanceName") == InstanceName)
355                  {   // We found the named pipes protocol                  {   // We found the named pipes protocol
356                      if (!(bool)prot.GetPropertyValue("Enabled"))                      if (!(bool)prot.GetPropertyValue("Enabled"))
357                      {   // Named pipes not activated                      {   // Named pipes not activated
# Line 292  namespace AnywhereTS Line 359  namespace AnywhereTS
359                                
360                          // Check if user wants to restart SQL server                          // Check if user wants to restart SQL server
361                          DialogResult resultRights;                          DialogResult resultRights;
362                          resultRights = MessageBox.Show("In order for users to use the AnywhereTS control panel, the SQL Express service on this computer need to be restarted. This operation might take up to 60 seconds. Do you want restart the SQL Express service now?", "AnywhereTS - Restart SQL Express (This operation might take up to 60 seconds!)", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);                          resultRights = MessageBox.Show(string.Format("In order for users to use the AnywhereTS control panel, the {0} service on this computer need to be restarted. This operation might take up to 60 seconds. Do you want restart the {0} service now?", InstanceName), string.Format("AnywhereTS - Restart {0} (This operation might take up to 60 seconds!)", InstanceName), MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
363                          if (resultRights == DialogResult.Yes)                          if (resultRights == DialogResult.Yes)
364                          {                          {
365                              // Restart the SQL server                              // Restart the SQL server
# Line 301  namespace AnywhereTS Line 368  namespace AnywhereTS
368                              foreach (ManagementObject svc in sqlServicesMan.GetInstances())                              foreach (ManagementObject svc in sqlServicesMan.GetInstances())
369                              {                              {
370                                  if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&                                  if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&
371                                      (string)svc.GetPropertyValue("ServiceName") == "MSSQL$SQLEXPRESS")                                      (string)svc.GetPropertyValue("ServiceName") == string.Format("MSSQL${0}", InstanceName))
372                                  {                                  {
373                                      svc.Get();                                      svc.Get();
374                                      if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)                                      if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)

Legend:
Removed from v.10  
changed lines
  Added in v.21

  ViewVC Help
Powered by ViewVC 1.1.22