在进行数据库的操作时,我们经常需要从数据库读取架构信息,以前我都是用Sql语句进行的。这方便资料不全,很多需要自己猜测,或是用SqlServer的事件跟踪器进行跟踪,看看SqlServer管理器是如何做的。

在.Net里就方便了。DbConnection对象有一个GetSchema方法,非常强大,可以获得数据库的很多架构信息,一般对我们来说都够用了。不过简单的使用,是只用他来返回表名称,如下所示:

string[] restrictions = new string[4];
restrictions[3] = "BASE TABLE"
DataTable table = connection.GetSchema("Tables", restrictions);

如以上这段代码就可以把数据库中所有的用户表的架构信息都填充到DataTable中。

对于Tables返回如下信息

 

对于其它架构信息,请参看MSDN中的相关说明。

对于每一张表,获得架构信息的最方便的方法莫过于使用DataAdapter.FillSchema方法,示例如下:

 

SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "select * from " + tblSection.TableName + " where 0 = 1"
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable tblTable = new DataTable();
da.FillSchema(tblTable, SchemaType.Source);

这样就可以很方便的从tblTable中读出表的完整的架构信息。

附:取得数据库架构的方法多种多样,研究的晕晕乎乎,在.Net下,这是我发现的最简单的方法了。