ASP.NET Forums
首页 搜索 用户列表 FAQ 注册 登录  
ASP.NET Forums » .Net 专区 » .Net源码 » Re: 多线程多服务器Sql查询分析器(适用于多服务更新)
  Re: 多线程多服务器Sql查询分析器(适用于多服务更新)
帖子发起人: BlueMonster   发起时间: 2008-5-25 2:12 AM   回复数: 3
« 上一主题 下一主题 »
楼主
  2008-5-25, 2:12 AM
BlueMonster 离线,最后访问时间: 8/1/2008 5:09:36 PM BlueMonster

发帖数前200位

士兵
等级: 士兵
注册: 2005年11月3日
积分: 28
精华: 0
发贴: 22
多线程多服务器Sql查询分析器(适用于多服务更新)
 

private void btn_ExecuteQuery_Click(object sender, EventArgs e)
        {
            if (StatusLabel.Text.Length == 0)
            {
                StatusLabel.Text = "DefaultQuery.sql";
            }
            if (rich_SqlQuery.Modified)
                rich_SqlQuery.SaveFile(StatusLabel.Text, RichTextBoxStreamType.PlainText);
            ProgressBar.Maximum = GetCheckedNodes(tv_left); ;
            ProgressBar.Minimum = 0;
            ProgressBar.Value = 0;
           
            nresult = 0;
            tbContorl_DataGrid.TabPages.Clear();
            CallRecursive(tv_left, 1);
            //ProgressBar.Value = ProgressBar.Maximum;
        }


        #endregion
        private void ExecSqlQuery(object treeNode)
        {
            TreeNode _treeNode = (TreeNode)treeNode;
            Nodedata nodedata = (Nodedata)_treeNode.Tag;
            DataTable customerTable = new DataTable();
            int dbtype = 0;
            if (rbQuery_DB.Checked) dbtype = 0;
            else
                dbtype = 1;
            SqlConnection connection = new SqlConnection(GetSqlConnectionString(dbtype, nodedata.DBIP));
            SqlDataAdapter customersTableAdapter = new SqlDataAdapter(sqlQueryText, connection);
            try
            {
                customersTableAdapter.Fill(customerTable);
                customerTable.TableName = nodedata.Name;
            }
            catch (SqlException sqlerr)
            {
                MessageBox.Show(sqlerr.Message);
            }
            //添加一个TabPage
            ThreadPool.QueueUserWorkItem(new WaitCallback(sqlquery_callback), customerTable);
            //ProgressBar.Value += 1;
            //tbContorl_DataGrid.Refresh();
        }


        private void sqlquery_callback(object o)
        {
            //DataTable tmp_data = (DataTable)o;
            tbContorl_DataGrid.Invoke(new tb_CallBack(tb_callback), new object[] { (DataTable)o });
        }
        private delegate void tb_CallBack(DataTable dbGrid);
        private void tb_callback(DataTable dataTable)
        {
            tbContorl_DataGrid.TabPages.Add(dataTable.TableName, dataTable.TableName);
            DataGridView dbGrid = new DataGridView();
            dbGrid.Parent = dbGrid.Parent = tbContorl_DataGrid.TabPages[dataTable.TableName];
            dbGrid.Dock = DockStyle.Fill;
            dbGrid.Name = dataTable.TableName;
            dbGrid.DataSource = dataTable;
            ProgressBar.Value++;
            StatusLabel.Text = string.Format("{0}%", ProgressBar.Value * 100 / ProgressBar.Maximum);
            statusStrip.Refresh();
            dbGrid.Refresh();
        }
private void ExecRecursiveNode(TreeNode treeNode, int OperatorType)
        {
            // Print the node.
            if (treeNode.Checked && treeNode.Nodes.Count == 0)
            {
                switch (OperatorType)
                {
                    case 0:
                        /****这部分涉及到部分机密,不好意思,不能公开****/
                    case 1:
                        {
                            sqlQueryText = rich_SqlQuery.Text;
                            Thread t = new Thread(new ParameterizedThreadStart(ExecSqlQuery));
                           
                            t.Start(treeNode);
                            break;
                        }
                }
                //MessageBox.Show("name="+treeNode.Text +"DBIP="+ nodedata.DBIP + "Logincount=" + nodedata.LoginCount.ToString() + "LogiIP="+ nodedata.LoginIP);
            }
            // Print each node recursively.
            foreach (TreeNode tn in treeNode.Nodes)
            {
                ExecRecursiveNode(tn, OperatorType);
            }
        }


        // Call the procedure using the TreeView.
        private void CallRecursive(TreeView treeView, int OperatorType)
        {
            if (treeView == null) return;


            TreeNodeCollection nodes = treeView.Nodes;
            foreach (TreeNode n in nodes)
            {
                ExecRecursiveNode(n, OperatorType);
            }
        }
        #endregion
       
        public string GetSqlConnectionString(int DBType, string ServerIP)
        {
            string ConnectionString;
            if (DBType == 0)
                ConnectionString = "user id=sa;data source=" + ServerIP + ";persist security info=True;initial catalog=master;password=tracert";
            else
                ConnectionString = "user id=sa;data source=" + ServerIP + ";persist security info=True;initial catalog=master;password=";
            return ConnectionString;
        }


IP 地址: 已登录   来自: 已登录    返回顶部
第 2 楼
  2008-5-25, 2:15 AM
BlueMonster 离线,最后访问时间: 8/1/2008 5:09:36 PM BlueMonster

发帖数前200位

士兵
等级: 士兵
注册: 2005年11月3日
积分: 28
精华: 0
发贴: 22
Re: 多线程多服务器Sql查询分析器(适用于多服务更新)
 
这个只是这个软件的核心代码,软件现在还处于不完善状态...不好意思发出来
应venjiang和海豚的强烈要求才把这段代码共享
过段时间有空了,我会把这软件继续完善...到时候再完全共享...嘿嘿
IP 地址: 已登录   来自: 已登录    返回顶部
第 3 楼
  2008-5-25, 2:31 AM
venjiang 离线,最后访问时间: 10/10/2008 4:35:26 PM venjiang



发帖数前10位

超级管理员
职务: 超级管理员
参谋长
等级: 参谋长
注册: 2004年6月8日
区域: 中国河北
积分: 2,099
精华: 9
发贴: 1,491

ASP NET Forums2.0 中文版开发团队
Re: 多线程多服务器Sql查询分析器(适用于多服务更新)
 
支持
IP 地址: 已登录   来自: 已登录    返回顶部
第 4 楼
  2008-5-25, 11:55 AM
海豚 离线,最后访问时间: 9/10/2008 3:29:00 PM 海豚

发帖数前75位

排长
等级: 排长
注册: 2006年3月18日
积分: 101
精华: 0
发贴: 45

ASP NET Forums2.0 中文版开发团队
Re: 多线程多服务器Sql查询分析器(适用于多服务更新)
 
 venjiang wrote:
支持

IP 地址: 已登录   来自: 已登录    返回顶部
 第 1 页 总共 1 页 [共有 4 条记录]
ASP.NET Forums » .Net 专区 » .Net源码 » Re: 多线程多服务器Sql查询分析器(适用于多服务更新)

友情链接: hiDotNet官方论坛 | hiDotNet知识库 | 其它友情链接

Asp.Net Forums version: 2.5.2725
(C)Copyright 2004-2007, hiDotNet.com. All Rights Reserved.
意见反馈 | 关于我们

Powered by Community Server :: Forums 中文本地化: hiDotNet.com