/[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 18 by william, Wed Jul 11 17:45:48 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();
# Line 22  namespace AnywhereTS Line 28  namespace AnywhereTS
28    
29          const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";          const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";
30    
31          public static string InstanceName = Properties.Settings.Default.atsConnectionString.Substring(Properties.Settings.Default.atsConnectionString.IndexOf(@"\"), Properties.Settings.Default.atsConnectionString.IndexOf(@";Database")).Replace(@"\", "").Replace(@";", "").Replace(@"Database", "");          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;
             bool bCreateDB = 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 = Properties.Settings.Default.atsConnectionString;                  sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString;
56                  sqlCon.Open();                  sqlCon.Open();
57              }              }
58              catch (SqlException sql_ex)              catch
59              {              {
60                  //MessageBox.Show(string.Format("Fail to connect to SQL Server Instance: {0}\n", InstanceName) + 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;                  //bCreateDB = true;
63                  try                  try
64                  {                  {
65                      sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS","master");                      sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
66                      sqlCon.Open();                      sqlCon.Open();
67                      RunScript(Resource1.CreateDatabase.ToString());                      RunScript(Resource1.CreateDatabase.ToString());
68                      sqlCon.Close();                      sqlCon.Close();
69                      sqlCon.ConnectionString = Properties.Settings.Default.atsConnectionString;                      sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace("AnywhereTS", "master"));
70                      sqlCon.Open();                      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)                  catch (SqlException sql_ex1)
77                  {                  {
78                      MessageBox.Show(string.Format("Fail to connect to SQL Server Instance: {0}\n", InstanceName) + sql_ex1.Number.ToString() + " " + sql_ex1.Message.ToString());                      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;                      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);              int chkVer = CheckVersion(out databaseVersion);
87              VersionCheck verChk = (VersionCheck)chkVer;              VersionCheck verChk = (VersionCheck)chkVer;
88              //MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));              MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));
   
89              switch (chkVer)              switch (chkVer)
90              {              {
91                  case (int)VersionCheck.Equal:                  case (int)VersionCheck.Equal:
# Line 109  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 180  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 232  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

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

  ViewVC Help
Powered by ViewVC 1.1.22