查询数据库中的表,返回字段相对应的数据类型!

上周的时候,项目相关的数据库底层做了一些改动,比如某一张表的一个字段的data type从bit变成int ,牵连着我的code当然也要做一些改动!不巧的是,old version和new version的数据库是并存的,就是说有可能数据库A中的data type依旧是bit, 但是数据库B的data type却被update成了int。这就需要我去查询数据库中的表,返回字段相对应的数据类型喽。

最开始是想直接找一条Sql语句去query,但是找了半天无果!

只好用C# Code去解决!

想法:利用最简单的“select * from [table]”,获取DataReader,这个DataReader中肯定包含了table的filed信息,包括column name,column data type.....

private static Hashtable GetTableDataType(string sql) { Hashtable hst = new Hashtable(); using (IDataReader dr = DBOperation.ExecuteReader(CommandType.Text, sql, new SqlParameter[] { })) if (dr != null) { while (dr.Read()) { for (int i = 0; i < dr.FieldCount; i++) { string name = dr.GetName(i).ToString(); Type type = dr.GetFieldType(i); hst.Add(name, type); } break; } } return hst; } 

返回的HashTable 对象包含了table的column name(key)和column data type(value)。

但是需要传个Sql语句string进去!

比如Hashtable Override_ListingTable = GetTableDataType("select top (1) * from [Relevance].Override_Listings");

接下来要判断DB是old还是new,直接用Override_ListingTable["fieldName"]就OK了!

 

当然,要是知道Sql语句直接去query table的字段的data type就更方便了。

你可能感兴趣的:(C#,数据库)