/[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 23 by william, Wed Jul 11 20:14:42 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                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
63                        sqlCon.Open();
64                        RunScript(Resource1.CreateDatabase.ToString());
65                        sqlCon.Close();
66                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
67                        sqlCon.Open();
68                        RunScript(Resource1.CreateTables.ToString());
69                        sqlCon.Close();
70                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
71                        sqlCon.Open();
72                    }
73                    catch (SqlException sql_ex1)
74                    {
75                        SqlException sql_ex = (sql_ex1.GetBaseException() as SqlException);
76                        MessageBox.Show(string.Format("Failed to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
77                        return bContinue;
78                    }
79              }              }
80                    
81              // Now that you are connected to Express, check the database versions              // Now that you are connected to Express, check the database versions
   
82              Version databaseVersion; // The current version of the database              Version databaseVersion; // The current version of the database
83                int chkVer = CheckVersion(out databaseVersion);
84              switch (CheckVersion(out databaseVersion))              VersionCheck verChk = (VersionCheck)chkVer;
85                MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));
86                switch (chkVer)
87              {              {
88                  case (int)VersionCheck.Equal:                  case (int)VersionCheck.Equal:
89                      {                      {
# Line 89  namespace AnywhereTS Line 130  namespace AnywhereTS
130                          bContinue = false;                          bContinue = false;
131                          break;                          break;
132                      }                      }
                 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;  
                     }  
133                  default:                  default:
134                      {                      {
135                          bContinue = false;                          bContinue = false;
# Line 160  namespace AnywhereTS Line 189  namespace AnywhereTS
189                  //Verify that the AnywhereTS database exists                  //Verify that the AnywhereTS database exists
190                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);                  sqlCmd = new SqlCommand("select count(*) from master..sysdatabases where name='AnywhereTS'", sqlCon);
191                  strResult = sqlCmd.ExecuteScalar().ToString();                  strResult = sqlCmd.ExecuteScalar().ToString();
192                    
193                  if (strResult == "0")                  if (strResult == "0")
194                  {                  {
195                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
196                      return (int)VersionCheck.DatabaseNotFound;                      sqlCon.Open();
197                        RunScript(Resource1.CreateDatabase.ToString());
198                        sqlCon.Close();
199                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
200                        sqlCon.Open();
201                        RunScript(Resource1.CreateTables.ToString());
202                        sqlCon.Close();
203                  }                  }
   
204                  try                  try
205                  {                  {
206                        sqlCon.Close();
207                        sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
208                        sqlCon.Open();
209                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);                      sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
210                      strResult = (string)sqlCmd.ExecuteScalar();                      strResult = (string)sqlCmd.ExecuteScalar();
211                        sqlCon.Close();
212                  }                  }
213                  catch                  catch
214                  {   // Assume we could not open the physical file                  {
215                      //Drop the database                      // the database exists, but one or more tables are missing
216                      sqlCmd = new SqlCommand("IF EXISTS(SELECT * FROM sysdatabases WHERE name='AnywhereTS')DROP DATABASE AnywhereTS", sqlCon);                      try
217                      strResult = (string)sqlCmd.ExecuteScalar();                      {
218                      return (int)VersionCheck.DatabaseNotFound;                                                  sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
219                            sqlCon.Open();
220                            RunScript(Resource1.CreateTables.ToString());
221                            sqlCon.Close();
222                            sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString);
223                            sqlCon.Open();
224                            sqlCmd = new SqlCommand("SELECT value from AnywhereTS..AppInfo where property='version'", sqlCon);
225                            strResult = (string)sqlCmd.ExecuteScalar();
226                        }
227                        catch
228                        {
229                            return (int)VersionCheck.Failed;
230                        }
231                  }                  }
232                  vDb = new Version(strResult);                  vDb = new Version(strResult);
233                        
# Line 212  namespace AnywhereTS Line 262  namespace AnywhereTS
262              return commands;              return commands;
263          }          }
264    
265        
266            [Obsolete("SetDatabaseRights() has been deperecated - user rights are assigned via SQL Server")]
267          public static void SetDatabaseRights()          public static void SetDatabaseRights()
268          {          {
269              try              try
# Line 265  namespace AnywhereTS Line 316  namespace AnywhereTS
316              }              }
317              catch              catch
318              {              {
319                  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.");
320              }              }
321          }          }
322    
# Line 284  namespace AnywhereTS Line 335  namespace AnywhereTS
335              {              {
336                  prot.Get();                  prot.Get();
337                  if ((string)prot.GetPropertyValue("ProtocolName") == "Np" &&  //Named pipes                  if ((string)prot.GetPropertyValue("ProtocolName") == "Np" &&  //Named pipes
338                      (string)prot.GetPropertyValue("InstanceName") == "SQLEXPRESS")                      (string)prot.GetPropertyValue("InstanceName") == InstanceName)
339                  {   // We found the named pipes protocol                  {   // We found the named pipes protocol
340                      if (!(bool)prot.GetPropertyValue("Enabled"))                      if (!(bool)prot.GetPropertyValue("Enabled"))
341                      {   // Named pipes not activated                      {   // Named pipes not activated
# Line 292  namespace AnywhereTS Line 343  namespace AnywhereTS
343                                
344                          // Check if user wants to restart SQL server                          // Check if user wants to restart SQL server
345                          DialogResult resultRights;                          DialogResult resultRights;
346                          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);
347                          if (resultRights == DialogResult.Yes)                          if (resultRights == DialogResult.Yes)
348                          {                          {
349                              // Restart the SQL server                              // Restart the SQL server
# Line 301  namespace AnywhereTS Line 352  namespace AnywhereTS
352                              foreach (ManagementObject svc in sqlServicesMan.GetInstances())                              foreach (ManagementObject svc in sqlServicesMan.GetInstances())
353                              {                              {
354                                  if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&                                  if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&
355                                      (string)svc.GetPropertyValue("ServiceName") == "MSSQL$SQLEXPRESS")                                      (string)svc.GetPropertyValue("ServiceName") == string.Format("MSSQL${0}", InstanceName))
356                                  {                                  {
357                                      svc.Get();                                      svc.Get();
358                                      if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)                                      if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)

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

  ViewVC Help
Powered by ViewVC 1.1.22