TreeView实现显示数据库服务器上所有数据库与数据表

首先是建立窗体Form和数据库登陆的信息输入窗口,之后在Form上面添加Treeview
然后每个节点都需要有自己的图标(不选和被选两种状态)
数据库服务器的登陆是通过SqlConnection进行实现的(略去)
 
下面的是Treeview的实现与初始化
通过realTreeView(TreeNode FNode, string byName, int depth)来实现
    其中FNode是要进行添加子节点的父节点,对于根节点的建立要用null指定(注意此时的depth=0);
    byName是传入的名字,根据depth其意义不同(depth=0:byName传入的是数据库服务器实例名, depth=1:byName传入的是某个数据库的名字)
    然后定义两个const int常量
        const short GETDBLISTBYSERVER = 1;
        const short GETTBLISTBYDBNAME = 2;

 

        #region 实现TreeView
        private void realTreeView(TreeNode FNode, string byName, int depth) // depth标示着深度,也用来描述图标
        {
            if (FNode == null)  // 建立根节点
            {
                treeView1.ImageList = imageList1;
                TreeNode tmpNode = new TreeNode();
                tmpNode.Text = byName;
                tmpNode.ImageIndex = 2*depth;
                tmpNode.SelectedImageIndex = 2*depth+1;
                treeView1.Nodes.Add(tmpNode);
                realTreeView(tmpNode, tmpNode.Text, depth+1);
                return;
            }
            List<string> ChNodes = getListByName(byName, depth);
            if (ChNodes == null)
            {
                return;
            }
            // 下面是根据父节点FNode添加子节点
            for (int i = 0; i < ChNodes.Count; ++i )
            {
                TreeNode tmpNode = new TreeNode();
                tmpNode.Text = ChNodes[i];
                tmpNode.ImageIndex = 2 * depth;
                tmpNode.SelectedImageIndex = 2 * depth + 1;
                FNode.Nodes.Add(tmpNode);
                realTreeView(tmpNode, tmpNode.Text, depth + 1);
            }
        }

         private List<string> getListByName(string byName, int depth)
        {
            List<string> retList = new List<string>();
            if (depth == GETDBLISTBYSERVER)
            {// 利用数据库服务器名字去获取数据库列表
                string cmdString = "Select name from sysdatabases where sid <> 0x01";
                SqlCommand sqlcmd = new SqlCommand(cmdString, connCloud);

                try
                {
                    if (connCloud.State == ConnectionState.Closed)
                    {
                        connCloud.Open();
                    }

                    IDataReader dr = sqlcmd.ExecuteReader();
                    retList.Clear();
                    while (dr.Read())
                    {
                        retList.Add(dr["name"].ToString());
                    }
                    dr.Close();
                    retList.Sort();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
                if (depth == GETTBLISTBYDBNAME)
                {// 利用数据库名称获取数据表列表
                    connCloud.ChangeDatabase(byName);
                    string strCMD = "SELECT Name FROM SysObjects Where XType='U' ORDER BY Name";
                    SqlCommand sqlCmd = new SqlCommand(strCMD, connCloud);
                    SqlDataReader dr = sqlCmd.ExecuteReader();
                    while (dr.Read())
                    {
                        retList.Add(dr["name"].ToString());
                    }
                    dr.Close();
                    retList.Sort();
                } 
                else
                {
                    retList = null;
                }

            return retList;
        }
        #endregion


通过这样的实现就可以完成单个数据库服务器实例上面的数据库以及数据表的TreeView显示.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值