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

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

  ViewVC Help
Powered by ViewVC 1.1.22