string strConn, strSQL; strConn = @"Data Source=(local);Initial Catalog=SiriusSQL;" + "Trusted_Connection=Yes;"; SqlConnection cn = new SqlConnection(strConn); cn.Open(); strSQL = "SELECT * FROM dbo.items"; SqlCommand cmd = new SqlCommand(strSQL, cn); SqlDataReader rdr; rdr = cmd.ExecuteReader(CommandBehavior.SchemaOnly); DataTable tbl = rdr.GetSchemaTable(); foreach (DataRow r in tbl.Rows) { Console.WriteLine("------------------------------------------------------------------"); foreach (DataColumn dc in tbl.Columns ) { Console.WriteLine("Property: {0, -30} Value: {1}", dc.ColumnName, r[dc].ToString()); } } rdr.Close(); cn.Close();Now, I defined this class:
/// <summary> /// Column schema - some properties /// </summary> public class ColumnSchema { public String ColumnName { get; set; } public Type DataType { get; set; } public SqlDbType DbType { get; set; } public Int16 ColumnSize { get; set; } public Int16 Precision { get; set; } public Int16 Scale { get; set; } }And so I have this code:
using (SqlDataReader sqlDataReader = command.ExecuteReader(CommandBehavior.SchemaOnly)) { DataTable tbl = sqlDataReader.GetSchemaTable(); foreach (DataRow r in tbl.Rows) { ColumnSchema colSchema = new ColumnSchema(); String readerColumnName = r["ColumnName"].ToString(); colSchema.ColumnName = readerColumnName; colSchema.ColumnSize = r.Field<Int16>("ColumnSize"); colSchema.DataType = (Type)(r["DataType"].ToString());The last line is failing, of course.