zoukankan      html  css  js  c++  java
  • (1).net c# 一步一步自己写三层代码生成器(主界面及连接数据库界面)

    {转}http://blog.csdn.net/jianzaochuanwu/article/details/7587932

    自己动手写代码生成器(主界面及连接sql数据库读取数据库和数据库中的表)

    (1)打开visual studio 建立winfrom项目,首先建立主界面如下图

    目前用到了 两个个控件:一个上方的"连接服务器"button按钮(点击时弹出连接sql服务器对话框),一个treeview控件(显示从sql服务器中读取到的数据库及数据库中的表)

    (2)建立连接服务器界面 。如下图:

    服务器地址:combox 有两个item 一个是.一个是127.0.0.1代表连接本机的sql服务器.

    身份验证:有两个选项:sql身份验证和windows身份验证。当选择sql身份验证时将下面的用户名和密码textbox 设置为可用

    代码如下 在 身份验证combxo的SelectedIndexChanged事件中写如下代码:

                if (cmbconType.SelectedItem.ToString() != "SQL SERVER身份验证")
                {
                    label3.Enabled = false;
                    label4.Enabled = false;
                    txtpwd.Enabled = false;
                    txtusername.Enabled = false;
                }
                else
                {
                    label3.Enabled = true;
                    label4.Enabled = true;
                    txtpwd.Enabled = true;
                    txtusername.Enabled = true;
                }

    最下面的 显示数据库的combox默认是不可用的enabled=false;而且显示服务器地址的combox默认选中.也就是本机。在窗体的load中写如下代码:

            private void conserver_Load(object sender, EventArgs e)
            {

        
                label5.Enabled = false;
                cmbdatabase.Enabled =false; //显示数据库的combox在窗体载入时设置为不可用。因为还没有连接服务器读取数据库。
                cmbconType.SelectedIndex = 1;//默认选中.
            }

    (3)接下来 在从服务器中读取数据库及表的信息,这里要用到 这么几个sql语句:

    获得一台服务器上的所有 数据库 select * from sys.databases 
    select * from INFORMATION_SCHEMA.COLUMNS 获得数据库所有列
    select * from INFORMATION_SCHEMA.TABLES    获得数据库所有表

    在连接测试按钮的click事件中写如下代码:

                string server = cboserverAdress.Text;//获得输入的服务器地址
                string user;
                string pwd;
                if (cmbconType.SelectedItem.ToString() == "SQL SERVER身份验证")
                {
                    user = txtusername.Text;//如果是使用sql身份验证则获取输入的用户名和密码
                    pwd = txtpwd.Text;
                    content = "server=" + server + ";" + "database=master;" + "uid=" + user + ";" + "pwd=" + pwd;//拼接连接字符串
                }
                else
                {
                    content = "server=" + server + ";" + "database=master;" + "integrated security=true";
                }
                try
                {
                    DataTable t = new System.Data.DataTable();
                    using (SqlConnection con = new SqlConnection(content))
                    {
                        con.Open();
                        string sql = "select * from sys.databases ";//获得服务器上的所有数据库
                        cmbdatabase.Items.Add("全部库");
                        using (SqlCommand cm = new SqlCommand(sql, con))
                        {
                            SqlDataAdapter a = new SqlDataAdapter(cm);
                            a.Fill(t);
                            foreach (DataRow r in t.Rows)
                            {
                                cmbdatabase.Items.Add(r["name"].ToString());//将获得的数据库添加到combox控件
                            }
                        }
    
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                cmbdatabase.Enabled = true;//将显示数据库的combox控件设置为可用
                label5.Enabled = true;
                cmbdatabase.SelectedIndex = 0;//默认选择全部数据库

    把这段代码封装为一个方法 因为要重复调用。
    接下来给确定按钮click事件添加如下代码:

                if (!readdatabasok)//readdatabasok这个字段表是否已经读取了数据库如果没有的话,读取数据库
                {
                    getdatabase();
                }
                isok = true;
                Close();

    这样我们连接服务器的模块 基本做完了。接下就是主界面了。

    当单击连接服务器按钮时显示我们刚才做的连接服务器界面,给clik事件添加如下代码:

     conserver c = new conserver();//实例化一个服务器界面对象

    c.ShowDialog();//显示出来

    当我们在连接服务器界面连接好服务器并选择了数据库后,我们就需要在主界面中读取我们选择的数据库,并加载到主界面的treeview控件上。这时就需要窗体间的传值了。关于窗体的传值可以参考这篇文章:http://www.cnblogs.com/jianzaochuanwu/archive/2012/05/16/2503475.html

    连接数据库按钮的click事件代码完整如下:

                c.ShowDialog();
                if (c.isok)
                {
                    ComboBox cc = c.getcomserver;
                    TreeNode node = new TreeNode();
                    node.Text = c.cboadress.Text;
                    node.ImageIndex = 0;
                    tvwserverlist.Nodes.Add(node);
                    if (cc.SelectedItem.ToString() == "全部库")
                    {
                        for (int i = 1; i < cc.Items.Count; i++)
                        {
                            TreeNode cnode = new TreeNode();
                            cnode.ImageIndex = 1;
                            cnode.SelectedImageIndex = 1;
                            cnode.Text = cc.Items[i].ToString();
                            node.Nodes.Add(cnode);
                            readtable(cnode.Text, cnode);
                        }
                    }
                    else
                    {
                        TreeNode cnode = new TreeNode();
                        cnode.ImageIndex = 1;
                        cnode.SelectedImageIndex = 1;
                        cnode.Text = cc.SelectedItem.ToString();
                        node.Nodes.Add(cnode);
                        readtable(cnode.Text, cnode);
     
                    }
                }


    根据数据库读取表的方法readtable方法定义如下

    //读取数据库中的表
            public void readtable(string databasename,TreeNode n)
            {
                string constr = c.content.Replace("master", databasename);
                string sql="select * from INFORMATION_SCHEMA.TABLES";
                using (SqlConnection con = new SqlConnection(constr))
                {
                    con.Open();
                    using (SqlCommand cm = new SqlCommand(sql, con))
                    {
                        SqlDataAdapter a = new SqlDataAdapter(cm);
                        DataTable t = new DataTable();
                        a.Fill(t);
                        foreach (DataRow r in t.Rows)
                        {
                            TreeNode tablenode = new TreeNode();
                            tablenode.Text = r["TABLE_NAME"].ToString();
                            tablenode.ImageIndex = 3;
                            tablenode.SelectedImageIndex = 3;
                            n.Nodes.Add(tablenode);
                        }
                    }
                }
            }

    这样主界面 和连接服务器界面基本功能就完成了。

    代码下载:(http://115.com/file/e78q71k3#代码生成(主窗体和连接服务器部分).zip)

  • 相关阅读:
    dyanmics crm workflow 工作流发送邮件配置
    dynamics crm 如何查看组织
    dynamics crm 表单视图JS操作
    dynamics crm 共享取消共享操作
    OpenTK入门系列一 创建窗体
    linux组管理和权限管理
    linux常用指令
    linux开关机
    linux运行级别
    linux开启sshd服务
  • 原文地址:https://www.cnblogs.com/yran/p/3489972.html
Copyright © 2011-2022 走看看