数据读取器---获取表的模式信息
在关系数据库中,“模式”有多种含义。这里使用这个术语表示数据结构的设计,尤其是数据库中表的设计。表由行和列组成,每个列可以有不同的数据类型。列及其属性(数据类型、长度等)构成了表的模式。
为了便于检索模式信息,可以调用数据读取器的GetSchemaTable方法。方法返回System.Data.DataTable对象,它是对所查询的描述(即模式),才DataRow和DataColumn对象的形式包含行和列的集合。这些行和列由DataTable类的Rows和Columns属性以集合对象的形式返回。
实例演示如何调用GetSchemaTable方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace SchemaTable { class Program { static void Main(string[] args) { string connString = @" server = .; integrated security =true; database =northwind"; string sql = @" select * from employees"; SqlConnection conn = new SqlConnection(connString); try { conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader rdr = cmd.ExecuteReader(); //store Employees schema in a data table DataTable schema = rdr.GetSchemaTable(); //display info from each RowNotInTableException in the data table. //each row describes a column in the database table. foreach (DataRow row in schema.Rows) { foreach (DataColumn col in schema.Columns) Console.WriteLine(col.ColumnName + " = " + row[col]); Console.WriteLine("---------------------"); } rdr.Close(); } catch (Exception e) { Console.WriteLine("Error Occurred: " + e); } finally { conn.Close(); } Console.ReadKey(); } } }
示例说明:
调用GetSchemaTable方法,返回一个已填充数据的DataTable实例:
DataTable schema = rdr.GetSchemaTable();
使用嵌套的foreach循环逐个遍历列的模式信息
foreach (DataRow row in schema.Rows)
{
foreach (DataColumn col in schema.Columns)
Console.WriteLine(col.ColumnName + " = " + row[col]);
Console.WriteLine("---------------------");
}