自己动手写一个业务实体生成器(2)

好了,这次我们说说从数据库获取一些元数据,是这样说的吧,^_^!我们先回想一下,以往我们写项目的时候,都是先设计好数据库,然后根据数据库的结构和数据进行编程了,那么既然要能根据数据库生产代码,那我们就必须知道数据库里面的表还有字段的相应类型等一些信息,恩,目前这个生成器只支持Access和MSSQL2000,所以就先说说这两个吧!
      sql2000的就用一句查询语句可以获取哦:
select [name] from sysobjects where xtype = 'U' and [name] <> 'sysdiagrams' order by [name]";看意思应该可以看明白吧,不多罗嗦了,这样我们就把对应数据库的表查询出来了,是不是简单呢,呵呵,就是这样啦。然后我们就要根据表获取对应表的字段的信息了。我们可以对表查询一条记录,以DataTable类型返回,它会映射到数据库的表,包括字段的信息,这样就可以获取了,记住实例化Command时要加上这句
 command.MissingSchemaAction = MissingSchemaAction.AddWithKey;
至于作用你可以查查msdn,会有所收获的!

现在比如我们要取主键,就可以这样写 DataColumn [] pk=dt.PrimaryKey;
pk[0]就是主键咯!^_^,具体大家可以多看看msdn,我想收获会更多哦!
Access就比较麻烦点:
 1    ADODB.ConnectionClass conn  =   new  ADODB.ConnectionClass();
 2              conn.Provider  =   " Microsoft.Jet.OLEDB.4.0 " ;
 3               string  connStr  =   " Provider=Microsoft.Jet.OleDb.4.0;Data Source= "   +   this .txtPath.Text;
 4              conn.Open(connStr.Substring(connStr.ToLower().IndexOf( " data source " +   " data source " .Length).Trim( ' = ' '   ' ),  null null 0 );
 5 
 6              ADODB.Recordset rsTables  =  conn.GetType().InvokeMember( " OpenSchema " , BindingFlags.InvokeMethod,  null , conn,  new   object [] { ADODB.SchemaEnum.adSchemaTables })  as  ADODB.Recordset;
 7               while  ( ! rsTables.EOF)
 8              {
 9                   if  ( ! (rsTables.Fields[ " TABLE_NAME " ].Value  as   string ).StartsWith( " MSys " ))
10                  {
11                       this .AccessTable.Items.Add(rsTables.Fields[ " TABLE_NAME " ].Value.ToString());
12                      
13                  }
14                  rsTables.MoveNext();
15              }

要用到ADODB,添加引用先哦!上述代码是从Access中查询所有表的名称,添加到一个checkboxlist上!
其他大都相同,就不多说了!有问题欢迎提出来!(新手一起进步!)下次我们讲一些细节,过程中我们应该会讨论一些技巧,比如用模板生成还是拼凑字符串 !

你可能感兴趣的:(生成)