天天看点

如何获取数据库架构

最近 关注了一款数据层映射生成工具,其中对它能自动识别数据库中的表以及表中的字段一直为惑不解.干脆用ILDASM直接的慢慢的仔细的看了下它的原代码,总算明白了

其实代码不长,很简单如下

  private void button1_Click(object sender, System.EventArgs e)

        {   

            OleDbConnection con=new OleDbConnection() ;

            TreeNode root=new TreeNode("数据库");

            try

            {               

                con.ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=.";

                con.Open();

                DataTable dt=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables ,

                    new object[] { null, null, null, "TABLE" });

                //  查看莫一个表中的所有字段

                OleDbDataReader read=null;

                OleDbCommand cmd=null;

                TreeNode tnd;

                for (int i=0;i<dt.Rows.Count;i++)

                {

                    tnd=new TreeNode(dt.Rows[i]["TABLE_NAME"].ToString());

                    string sql="select * from ";

                    sql=string.Concat(new string[]{sql,"[",dt.Rows[i]["TABLE_NAME"].ToString(),"]"," WHERE 1=-1"});

                    cmd=new OleDbCommand(sql,con);

                    read=cmd.ExecuteReader();

                    for (int j=0; j<read.FieldCount;j++)

                    {

                        TreeNode tn=new TreeNode(read.GetName(j));

                        tnd.Nodes.Add(tn);

                    }

                    read.Close();

                    cmd.Dispose();

                    root.Nodes.Add(tnd);                   

                }   

            }   

            catch(Exception e1)

            {

                MessageBox.Show(e1.Message);

            }

            finally

                con.Close();

                this.treeView1.Nodes.Add(root);

        }

    }

基本上如此,有些界面的代码,改改就好了

效果如下