自己动手写一个业务实体生成器(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('='' '), nullnull0);
 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上!
其他大都相同,就不多说了!有问题欢迎提出来!(新手一起进步!)下次我们讲一些细节,过程中我们应该会讨论一些技巧,比如用模板生成还是拼凑字符串!
posted @ 2007-10-17 14:32  Awen  阅读(531)  评论(2编辑  收藏  举报