Exemple #1
0
        private static float GetBackUpVersion(string connctionString, string backUpFileName)
        {
            var ver  = (float)0;
            var line = 0;

            try
            {
                var cn = new SqlConnection(connctionString);

                line = 1;
                if (backUpFileName.EndsWith(".NPZ") || backUpFileName.EndsWith(".npz"))
                {
                    var zp = new Zip();
                    line           = 2;
                    backUpFileName = zp.ExtractTempDIR(backUpFileName);
                }


                else if (backUpFileName.EndsWith(".NPZ2") || backUpFileName.EndsWith(".npz2"))
                {
                    try
                    {
                        line = 3;
                        var pathtemp = Zip.TempDirName();
                        line = 4;
                        var fileInfo = new FileInfo(backUpFileName);
                        line     = 5;
                        pathtemp = Path.Combine(pathtemp, fileInfo.Name);
                        line     = 6;
                        pathtemp = Path.ChangeExtension(pathtemp, ".bak");
                        line     = 7;
                        using (var archive = GZipArchive.Open(backUpFileName))
                        {
                            line = 8;
                            foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory))
                            {
                                line = 9;
                                entry.WriteToFile(pathtemp, new ExtractionOptions()
                                {
                                    ExtractFullPath = true,
                                    Overwrite       = true
                                });
                            }
                        }

                        line           = 10;
                        backUpFileName = pathtemp;
                    }
                    catch
                    {
                        var zp = new Zip();
                        line           = 2000;
                        backUpFileName = zp.ExtractTempDIR(backUpFileName);
                    }
                }

                line = 11;
                if (string.IsNullOrEmpty(backUpFileName))
                {
                    return(ver);
                }
                line = 12;
                var command = @"RESTORE HEADERONLY FROM DISK ='" + backUpFileName + "'";
                line = 13;

                using (var sqlCommand = new SqlCommand(command, cn))
                {
                    line = 14;
                    cn.Open();
                    line = 15;
                    var sqlDataReader = sqlCommand.ExecuteReader();
                    line = 16;
                    while (sqlDataReader.Read())
                    {
                        line = 17;
                        Console.WriteLine();
                        line = 18;
                        var d = $"{sqlDataReader["DatabaseVersion"]}";
                        line = 19;
                        if (string.IsNullOrEmpty(d))
                        {
                            continue;
                        }
                        line = 20;
                        switch (d)
                        {
                        case "406": ver = 6; break;

                        case "408": ver = (float)6.5; break;

                        case "515": ver = 7; break;

                        case "539": ver = 2000; break;

                        case "611": ver = 2005; break;

                        case "612": ver = 2005; break;

                        case "655": ver = 2008; break;

                        case "661": ver = 2008; break;

                        case "706": ver = 2012; break;

                        case "782": ver = 2014; break;

                        case "869": ver = 2017; break;

                        case "895": ver = 2019; break;

                        case "852": ver = 2016; break;

                        default: ver = 0; break;
                        }

                        line = 21;
                        return(ver);
                    }
                }
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex,
                                                        $"Error In Line{line} With ConnectionString:{connctionString} AND BackUpFileName:{backUpFileName}");
                ver = 0;
            }

            return(ver);
        }
        public static async Task <ReturnedSaveFuncInfo> ReStoreDbAsync(string connectionString, string pathf, bool autoBackup, ENSource Source)
        {
            var ret = new ReturnedSaveFuncInfo();
            var cn  = new SqlConnection();

            try
            {
                GC.Collect();
                SqlConnection.ClearAllPools();

                if (autoBackup)
                {
                    var dir = Application.StartupPath + "\\NovinPardazBackUp";
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    var file = Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly()?.Location)?.Replace(".exe", "__");
                    var d    = Calendar.MiladiToShamsi(DateTime.Now).Replace("/", "_");
                    d    += "__" + DateTime.Now.Hour + " - " + DateTime.Now.Minute;
                    file += d;

                    var filepath = dir + "\\" + file + ".Bak";
                    ret.AddReturnedValue(await BackupDbAsync(connectionString, Source, filepath, Guid.NewGuid()));
                }

                if (pathf.EndsWith(".NPZ") || pathf.EndsWith(".npz"))
                {
                    var zp = new Zip();
                    pathf = zp.ExtractTempDIR(pathf);
                }
                else if (pathf.EndsWith(".NPZ2") || pathf.EndsWith(".npz2"))
                {
                    try
                    {
                        var zp  = new CompressFile();
                        var res = await zp.ExtractTempDIR(pathf);

                        ret.AddReturnedValue(res);
                        if (res.HasError)
                        {
                            return(ret);
                        }
                        pathf = res.value;
                    }
                    catch
                    {
                        var zp = new Zip();
                        pathf = zp.ExtractTempDIR(pathf);
                    }
                }

                var csb = new SqlConnectionStringBuilder(connectionString);
                var serverConnectionString =
                    connectionString.Replace("Initial Catalog=" + csb.InitialCatalog, "Initial Catalog=");
                cn = new SqlConnection(serverConnectionString)
                {
                    ConnectionString = serverConnectionString
                };
                var cmd        = new SqlCommand("RESTORE DATABASE [dbName] FROM  DISK = N'bkPath' WITH  FILE = 1,  MOVE N'novin' TO N'dbMDFPath',  MOVE N'novin_log' TO N'dbLDFPath',   NOUNLOAD,  REPLACE,  STATS = 5", cn);
                var dbInfo     = new CLSServerDBs(connectionString);
                var backUpInfo = new DataBaseBackUpInfo(pathf, cn.ConnectionString);

                cmd.CommandText = cmd.CommandText.Replace("dbName", csb.InitialCatalog);
                cmd.CommandText = cmd.CommandText.Replace("bkPath", pathf);
                cmd.CommandText = cmd.CommandText.Replace("novin", backUpInfo.LogicalName);
                cmd.CommandText = cmd.CommandText.Replace("novin_log", backUpInfo.LogicalName + "_log.ldf");
                cmd.CommandText = cmd.CommandText.Replace("dbMDFPath", dbInfo.FileName);
                cmd.CommandText =
                    cmd.CommandText.Replace("dbLDFPath", dbInfo.FileName.ToLower().Replace(".mdf", "_log.Ldf"));

                //تایم اوت بالا بردن مجاز است
                cmd.CommandTimeout = 5 * 60 * 1000;//5 minutes

                cn.Open();
                var temp = cmd.CommandText;
                cmd.CommandText = "ALTER DATABASE [" + csb.InitialCatalog + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
                cmd.ExecuteNonQuery();

                cmd.CommandText = temp;
                cmd.ExecuteNonQuery();

                // cmd.CommandText = NovinPardaz.Properties.Resources.DatabaseSettings;
                cmd.CommandText = cmd.CommandText.Replace("dbName", csb.InitialCatalog);
                cmd.ExecuteNonQuery();

                cmd.CommandText = "ALTER DATABASE [" + csb.InitialCatalog + "] SET Multi_USER";
                cmd.ExecuteNonQuery();
                cn.Close();

                SqlConnection.ClearAllPools();
                Application.DoEvents();
            }
            catch (SqlException ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                try { cn.Close(); } catch { }
                ret.AddReturnedValue(ReturnedState.Error, $"حساب کاربری SQL دسترسی به مسیر نصب برنامه ندارد\r\n{ex.Message }//{ex?.InnerException?.Message ?? ""}");
            }
            catch (Exception ex)
            {
                WebErrorLog.ErrorInstence.StartErrorLog(ex);
                try { cn.Close(); } catch { }
                ret.AddReturnedValue(ex);
            }
            Task.Run(() => SetMultiUser(connectionString));
            return(ret);
        }