Esempio n. 1
0
        private Boolean ImportFile(String filename, List <int> tenantsToImport, Boolean preserveRecordId)
        {
            String tableName = "tb_" + Path.GetFileNameWithoutExtension(filename);

            progressLog += tableName + Environment.NewLine;
            XmlNode rowCollection;

            ImportData importData = new ImportData(filename);

            currentDatabase = importData.DatabaseName;
            rowCollection   = importData.MainNode;
            if ((currentDatabase == null) || (rowCollection == null))
            {
                lastError = importData.GetLastError();
                return(false);
            }

            // Se o XML não possui registros considera como se tivesse importado e retorna
            if (rowCollection.FirstChild == null)
            {
                return(true);
            }

            DBQuery dbQuery = new DBQuery(sqlConnection);
            // Evita alterar o banco de dados pois o Microsoft Azure não tem suporte a essa operação
            // dbQuery.Query = "use " + currentDatabase;
            // dbQuery.Execute(false);

            // Verifica se a tabela já está populada, se estiver aborta
            ImportController controller = new ImportController(sqlConnection, importData, this);

            if (!controller.TableIsEmpty())
            {
                lastError = "A importação foi cancelada pois a tabela " + tableName + " já possui dados.";
                return(false);
            }

            try // tenta fazer a inserção dos dados na tabela
            {
                controller.MountDependencies(filesToImport, databaseForeignKeys);
                int?lastInsertedId = 0;
                while (controller.MoveNextRecord())
                {
                    int?owner = controller.GetRecordOwner();
                    if ((owner == null) || (tenantsToImport.Contains(owner.Value)))
                    {
                        // Conserta o identity para que seja mantida a numeração original
                        if (preserveRecordId)
                        {
                            controller.FixIdentity(lastInsertedId);
                        }

                        dbQuery.Query = controller.MountInsertStatement();
                        dbQuery.Execute(true);
                        lastInsertedId = dbQuery.ExtractFromResultset();
                    }
                    progressMeter.IncreaseProgress(1);
                }
            }
            catch (Exception exc)
            {
                lastError = exc.Message + Environment.NewLine + progressLog;
                return(false);
            }

            return(true);
        }