>>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();>>
>>/// <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; } >> }>>
>> 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());>>
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"]); colSchema.DbType = (SqlDbType)(Convert.ToInt32(r["ProviderType"])); columnTypes.Add(readerColumnName, colSchema); }which compiles OK but I haven't tested it yet.