最近 关注了一款数据层映射生成工具,其中对它能自动识别数据库中的表以及表中的字段一直为惑不解.干脆用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);
}
}
基本上如此,有些界面的代码,改改就好了
效果如下