Mar 20, 2014

BackgroundWorker from another class in c#

BackgroundWorker bgWork;

bgWork = new BackgroundWorker();              
                bgWork.WorkerReportsProgress = true;
                bgWork.DoWork += new DoWorkEventHandler(bgWork_DoWork);
                bgWork.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWork_RunWorkerCompleted);
                bgWork.ProgressChanged += new ProgressChangedEventHandler(bgWork_ProgressChanged);
                bgWork.RunWorkerAsync();

void bgWork_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            string status = e.UserState.ToString();
            if (!bgWork.CancellationPending)
            {

                lblStatus.BeginInvoke((Action)(() => { lblStatus.Text = status; }));
                ultraProgressBar1.BeginInvoke((Action)(() => { ultraProgressBar1.Value = e.ProgressPercentage; }));
             
                if (status == "Populating Views ...")
                {
                    int per = e.ProgressPercentage;
                }
                if (e.ProgressPercentage > 0)
                {
                    int per = e.ProgressPercentage;
                }
            }
        }

        void bgWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                MessageBox.Show("Action is canceled !", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Successfully !", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            //ultraGroupBox1.Enabled = true;
            ultraGroupBox2.Visible = false;
            btnTransfer.Enabled = true;
            treeView1.Enabled = true;
        }

        void bgWork_DoWork(object sender, DoWorkEventArgs e)
        {
         
            adapter.PopulateTreeNodes(treeView1, sender, e,out errorData);
            if (errorData.tbErrorMessage.Rows.Count > 0)
            {
                MessageBox.Show("Please see the error sheet to more information", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

public class SqlManagerAdapter
    {
        public Microsoft.SqlServer.Management.Smo.Server sqlServer { get; set; }
        public Microsoft.SqlServer.Management.Smo.Database sqlDatabase { get; set; }
        public Microsoft.SqlServer.Management.Smo.Database sqlDatabaseTo { get; set; }

        public SqlManagerAdapter()
        {
            sqlServer = null;
            sqlDatabase = null;
        }

        public void ConnectToDatabase(string ServerName, string DatabaseName, string DatabaseNameTo, string UserName, string Password)
        {
            Microsoft.SqlServer.Management.Common.ServerConnection svconnect = new ServerConnection(ServerName, UserName, Password);
            sqlServer = new Server(svconnect);
            sqlDatabase = sqlServer.Databases[DatabaseName];
            sqlDatabaseTo = sqlServer.Databases[DatabaseNameTo];
        }
        public void PopulateTreeNodes(TreeView tree,object sender, DoWorkEventArgs e,out ErrorData ds)
        {
            string error = string.Empty;
            BackgroundWorker bgWork = (BackgroundWorker)sender;
            bgWork.ReportProgress(0, "Connecting...");
            int total = sqlDatabase.StoredProcedures.Count;
            total += sqlDatabase.Views.Count;
            int count = 0;

            PopulateStoredProcedures(tree, ref count, total, sender, e, out ds);
            PopulateViews(tree, ref count, total, sender, e, out ds);
         
        }

        private void PopulateStoredProcedures(TreeView tree, ref int count, int total, object sender, DoWorkEventArgs e, out ErrorData ds)
        {
            ds = new ErrorData();
            BackgroundWorker bgWork = (BackgroundWorker)sender;
            TreeNode rootNode = new TreeNode("Stored Procedures");
            int temp = 0;
            temp = count;
            string status = string.Empty;
            for (int i = 0; i < sqlDatabase.StoredProcedures.Count; i++)
            {
                count = temp + i + 1;
                Microsoft.SqlServer.Management.Smo.StoredProcedure obj = sqlDatabase.StoredProcedures[i];
                if ((bgWork.CancellationPending == true))
                {
                    e.Cancel = true;
                    bgWork.ReportProgress(0, "Populating Stored Procedures ...");
                    break;
                }
                else
                {
                    if (obj != null)
                    {
                        if (!obj.IsSystemObject && !obj.Name.StartsWith("_"))
                        {
                            try
                            {
                                // Perform a time consuming operation and report progress.
                                TreeNode tn = new TreeNode(obj.Name);
                                tn.Tag = obj;
                                rootNode.Nodes.Add(tn);

                                status = obj.Name;
                            }
                            catch (Exception err)
                            {
                                DataRow r = ds.tbErrorMessage.NewRow();
                                r[0] = obj.Name;
                                r[1] = err.Message;
                                r[2] = err.InnerException;
                                ds.tbErrorMessage.Rows.Add(r);
                            }
                         
                        }
                    }
                    //System.Threading.Thread.Sleep(100);
                    int percent = count * 100 / total;
                    bgWork.ReportProgress(percent, "Stored Procedure: " + status);
                }
            }
            tree.BeginInvoke((Action)(() => { tree.Nodes.Add(rootNode); }));
         
        }
        private void PopulateViews(TreeView tree, ref int count, int total, object sender, DoWorkEventArgs e, out ErrorData ds)
        {
            ds = new ErrorData();
            BackgroundWorker bgWork = (BackgroundWorker)sender;
            TreeNode rootNode = new TreeNode("Views");
            int temp = 0;
            temp = count;
            string status = string.Empty;
            for (int i = 0; i < sqlDatabase.Views.Count; i++)
            {
                count = temp + i + 1;
                Microsoft.SqlServer.Management.Smo.View obj = sqlDatabase.Views[i];
                if ((bgWork.CancellationPending == true))
                {
                    e.Cancel = true;
                    bgWork.ReportProgress(0, "Populating Views ...");
                    break;
                }
                else
                {
                    if (obj != null)
                    {

                     
                        if (!obj.IsSystemObject && !obj.Name.StartsWith("_"))
                        {
                            try
                            {
                                // Perform a time consuming operation and report progress.
                                TreeNode tn = new TreeNode(obj.Name);
                                tn.Tag = obj;
                                rootNode.Nodes.Add(tn);
                                status = obj.Name;
                            }
                            catch (Exception err)
                            {
                                DataRow r = ds.tbErrorMessage.NewRow();
                                r[0] = obj.Name;
                                r[1] = err.Message;
                                r[2] = err.InnerException;
                                ds.tbErrorMessage.Rows.Add(r);
                            }
                         


                        }
                    }
                    //System.Threading.Thread.Sleep(100);
                    int percent = count * 100 / total;
                    bgWork.ReportProgress(percent, "View: " + status);
                }
            }
            tree.BeginInvoke((Action)(() => { tree.Nodes.Add(rootNode); }));
         
        }
        public void TransferObject(TreeView tree, object sender, DoWorkEventArgs e,out ErrorData ds)
        {
            ds = new ErrorData();
            BackgroundWorker bgWork = (BackgroundWorker)sender;
            bgWork.ReportProgress(0, "Connecting...");
            string status = string.Empty;
            List<TreeNode> CheckedNodes = GetCheckedNodes(tree.Nodes);
            if (CheckedNodes != null)
            {
             
                for (int i = 0; i < CheckedNodes.Count; i++)
                {
                    TreeNode node = CheckedNodes[i];
                    object nodeTag = node.Tag;
                    if (nodeTag is Microsoft.SqlServer.Management.Smo.StoredProcedure)
                    {
                        Microsoft.SqlServer.Management.Smo.StoredProcedure obj = (Microsoft.SqlServer.Management.Smo.StoredProcedure)nodeTag;
                        if (obj != null)
                        {
                            if (!obj.IsEncrypted)
                            {
                                try
                                {
                                    Microsoft.SqlServer.Management.Smo.StoredProcedure objTo = sqlDatabaseTo.StoredProcedures[obj.Name];
                                    if (objTo != null)
                                    {
                                        objTo.Drop();
                                    }

                                    objTo = new StoredProcedure(sqlDatabaseTo, obj.Name, obj.Schema);

                                    objTo.TextMode = true;
                                    objTo.AnsiNullsStatus = false;
                                    objTo.QuotedIdentifierStatus = false;

                                    objTo.TextHeader = obj.TextHeader;
                                    objTo.TextBody = obj.TextBody;

                                    objTo.Create();
                                    //objTo.QuotedIdentifierStatus = true;
                                    //objTo.Alter();
                                    //System.Threading.Thread.Sleep(1000);
                                    status = "Stored Procedure: " + obj.Name;
                                }
                                catch (Exception err)
                                {
                                    DataRow r = ds.tbErrorMessage.NewRow();
                                    r[0] = obj.Name;
                                    r[1] = err.Message;
                                    r[2] = err.InnerException;
                                    ds.tbErrorMessage.Rows.Add(r);
                                }
                             
                             
                            }
                        }
                    }
                    else if (nodeTag is Microsoft.SqlServer.Management.Smo.View)
                    {
                        Microsoft.SqlServer.Management.Smo.View obj = (Microsoft.SqlServer.Management.Smo.View)nodeTag;
                        if (obj != null)
                        {
                            if (!obj.IsEncrypted)
                            {
                                try
                                {
                                    Microsoft.SqlServer.Management.Smo.View objTo = sqlDatabaseTo.Views[obj.Name];
                                    if (objTo != null)
                                    {
                                        objTo.Drop();
                                    }

                                    objTo = new Microsoft.SqlServer.Management.Smo.View(sqlDatabaseTo, obj.Name, obj.Schema);
                                    //Set the TextHeader and TextBody property to define the view.
                                    objTo.TextHeader = obj.TextHeader;
                                    objTo.TextBody = obj.TextBody;
                                    //Create the view on the instance of SQL Server.
                                    //System.Threading.Thread.Sleep(1000);
                                    objTo.Create();
                                    status = "View: " + obj.Name;
                                }
                                catch (Exception err)
                                {
                                    DataRow r = ds.tbErrorMessage.NewRow();
                                    r[0] = obj.Name;
                                    r[1] = err.Message;
                                    r[2] = err.InnerException;
                                    ds.tbErrorMessage.Rows.Add(r);
                                }
                         
                             
                            }
                        }
                    }

                    int percent = i * 100 / CheckedNodes.Count;
                    bgWork.ReportProgress(percent, status);
                }
            }
         
        }
        private List<TreeNode> GetCheckedNodes(TreeNodeCollection nodes)
        {
            List<TreeNode> result = new List<TreeNode>();
            for (int i = 0; i < nodes.Count; i++)
            {
                TreeNode node = nodes[i];
                if (node.Checked)
                {
                    result.Add(node);
                }
                if (node.Nodes.Count > 0)
                {
                    result.AddRange(GetCheckedNodes(node.Nodes));
                }
            }
            return result;

        }
     
    }

0 comments:

Post a Comment

Nam Le © 2014 - Designed by Templateism.com, Distributed By Templatelib