如何获取数据库架构

最近 关注了一款数据层映射生成工具,其中对它能自动识别数据库中的表以及表中的字段一直为惑不解.干脆用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);
            }
           
        }

       
    }

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

你可能感兴趣的:(.Net)