好了,这次我们说说从数据库获取一些元数据,是这样说的吧,^_^!我们先回想一下,以往我们写项目的时候,都是先设计好数据库,然后根据数据库的结构和数据进行编程了,那么既然要能根据数据库生产代码,那我们就必须知道数据库里面的表还有字段的相应类型等一些信息,恩,目前这个生成器只支持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上!
其他大都相同,就不多说了!有问题欢迎提出来!(新手一起进步!)下次我们讲一些细节,过程中我们应该会讨论一些技巧,比如用模板生成还是拼凑字符串
!