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

Legend:
Removed from v.4  
changed lines
  Added in v.33

  ViewVC Help
Powered by ViewVC 1.1.22