/[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 22 by william, Wed Jul 11 20:13:17 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.Replace("AnywhereTS", "master"));
76                        sqlCon.Open();
77                        RunScript(Resource1.CreateTables.ToString());
78                        sqlCon.Close();
79                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
80                        sqlCon.Open();
81                    }
82                    catch (SqlException sql_ex1)
83                    {
84                        SqlException sql_ex = (sql_ex1.GetBaseException() as SqlException);
85                        MessageBox.Show(string.Format("Failed to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
86                        return bContinue;
87                    }
88              }              }
89                    
90              // Now that you are connected to Express, check the database versions              // Now that you are connected to Express, check the database versions
   
91              Version databaseVersion; // The current version of the database              Version databaseVersion; // The current version of the database
92                int chkVer = CheckVersion(out databaseVersion);
93              switch (CheckVersion(out databaseVersion))              VersionCheck verChk = (VersionCheck)chkVer;
94                MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));
95                switch (chkVer)
96              {              {
97                  case (int)VersionCheck.Equal:                  case (int)VersionCheck.Equal:
98                      {                      {
# Line 89  namespace AnywhereTS Line 139  namespace AnywhereTS
139                          bContinue = false;                          bContinue = false;
140                          break;                          break;
141                      }                      }
                 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;  
                     }  
142                  default:                  default:
143                      {                      {
144                          bContinue = false;                          bContinue = false;
# Line 160  namespace AnywhereTS Line 198  namespace AnywhereTS
198                  //Verify that the AnywhereTS database exists                  //Verify that the AnywhereTS database exists
199                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);
200                  strResult = sqlCmd.ExecuteScalar().ToString();                  strResult = sqlCmd.ExecuteScalar().ToString();
201                    
202                  if (strResult == "0")                  if (strResult == "0")
203                  {                  {
204                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
205                      return (int)VersionCheck.DatabaseNotFound;                      sqlCon.Open();
206                        RunScript(Resource1.CreateDatabase.ToString());
207                        sqlCon.Close();
208                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
209                        sqlCon.Open();
210                        RunScript(Resource1.CreateTables.ToString());
211                        sqlCon.Close();
212                  }                  }
   
213                  try                  try
214                  {                  {
215                        sqlCon.Close();
216                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
217                        sqlCon.Open();
218                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
219                      strResult = (string)sqlCmd.ExecuteScalar();                      strResult = (string)sqlCmd.ExecuteScalar();
220                        sqlCon.Close();
221                  }                  }
222                  catch                  catch
223                  {   // Assume we could not open the physical file                  {
224                      //Drop the database                      // the database exists, but one or more tables are missing
225                      sqlCmd = new SqlCommand("IF EXISTS(SELECT * FROM sysdatabases WHERE name='AnywhereTS')DROP DATABASE AnywhereTS", sqlCon);                      try
226                      strResult = (string)sqlCmd.ExecuteScalar();                      {
227                      return (int)VersionCheck.DatabaseNotFound;                                                  sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
228                            sqlCon.Open();
229                            RunScript(Resource1.CreateTables.ToString());
230                            sqlCon.Close();
231                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
232                            sqlCon.Open();
233                            sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
234                            strResult = (string)sqlCmd.ExecuteScalar();
235                        }
236                        catch
237                        {
238                            return (int)VersionCheck.Failed;
239                        }
240                  }                  }
241                  vDb = new Version(strResult);                  vDb = new Version(strResult);
242                        
# Line 212  namespace AnywhereTS Line 271  namespace AnywhereTS
271              return commands;              return commands;
272          }          }
273    
274        
275            [Obsolete("SetDatabaseRights() has been deperecated - user rights are assigned via SQL Server")]
276          public static void SetDatabaseRights()          public static void SetDatabaseRights()
277          {          {
278              try              try
# Line 265  namespace AnywhereTS Line 325  namespace AnywhereTS
325              }              }
326              catch              catch
327              {              {
328                  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.");
329              }              }
330          }          }
331    
# Line 284  namespace AnywhereTS Line 344  namespace AnywhereTS
344              {              {
345                  prot.Get();                  prot.Get();
346                  if ((string)prot.GetPropertyValue("ProtocolName") == "Np" &&  //Named pipes                  if ((string)prot.GetPropertyValue("ProtocolName") == "Np" &&  //Named pipes
347                      (string)prot.GetPropertyValue("InstanceName") == "SQLEXPRESS")                      (string)prot.GetPropertyValue("InstanceName") == InstanceName)
348                  {   // We found the named pipes protocol                  {   // We found the named pipes protocol
349                      if (!(bool)prot.GetPropertyValue("Enabled"))                      if (!(bool)prot.GetPropertyValue("Enabled"))
350                      {   // Named pipes not activated                      {   // Named pipes not activated
# Line 292  namespace AnywhereTS Line 352  namespace AnywhereTS
352                                
353                          // Check if user wants to restart SQL server                          // Check if user wants to restart SQL server
354                          DialogResult resultRights;                          DialogResult resultRights;
355                          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);
356                          if (resultRights == DialogResult.Yes)                          if (resultRights == DialogResult.Yes)
357                          {                          {
358                              // Restart the SQL server                              // Restart the SQL server
# Line 301  namespace AnywhereTS Line 361  namespace AnywhereTS
361                              foreach (ManagementObject svc in sqlServicesMan.GetInstances())                              foreach (ManagementObject svc in sqlServicesMan.GetInstances())
362                              {                              {
363                                  if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&                                  if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&
364                                      (string)svc.GetPropertyValue("ServiceName") == "MSSQL$SQLEXPRESS")                                      (string)svc.GetPropertyValue("ServiceName") == string.Format("MSSQL${0}", InstanceName))
365                                  {                                  {
366                                      svc.Get();                                      svc.Get();
367                                      if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)                                      if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)

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

  ViewVC Help
Powered by ViewVC 1.1.22