ADO.NET 2.0 new GetSchema method. Schema is finally a first class citizen of the managed providers.
ADO.NET 2.0 has finally added support for retrieving Schema information. In v1.1 your only option was to go through the OLEDB native provider through the GetOledbSchemaInfo class, now Schema is a first class citizen in all of the Managed Providers.
using System.Data;
using System;
using System.Data.SqlClient;
namespace DataViewer.Repro
{
public class Repro
{
public static int Main(string[] args)
{
SqlConnection sqlconnection1 = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi");
sqlconnection1.Open();
SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
DataTable datatable1 = sqlconnection1.GetSchema("databases");
foreach (DataRow row in datatable1.Rows)
{
foreach (DataColumn col in datatable1.Columns)
{
Console.WriteLine(col.ToString() +" = " +row[col].ToString());
}
}
return 1;
}
}
}
The Schema that you can retrieve (GetSchema(<Schema that you can retrieve>) ) is Backend specific. For a complete list of the valid values you can call GetSchema() with no parameters:
DataTable datatable1 = sqlconnection1.GetSchema();
foreach (DataRow row in datatable1.Rows)
{
Console.WriteLine(row["CollectionName"]);
}
valid Schema that you can retrieve for SqlServer 2005:
MetaDataCollections, DataSourceInformation, DataTypes, Restrictions, ReservedWords, Users, Databases, Tables, Columns, Views, ViewColumns, ProcedureParameters, Procedures, ForeignKeys, IndexColumns, Indexes, UserDefinedTypes
Rambling out. Standard disclaimer. This post is provided “AS IS” and confers no rights.
Comments
- Anonymous
August 03, 2004
Thanks for the great posting. I have been wanting this feature for some time now as I hate calling those stored procs to get my schema info. Great feature and great posting! You have finally answered a long standing question about ADO.Net 2.0 that I have been having for a long time now.
Again thanks. - Anonymous
August 03, 2004
good news :)
ADO should have great revalution - Anonymous
August 03, 2004
Angel:
Is all of that info derived through the connection exclusively? - Anonymous
August 03, 2004
Hi,
have you looked at 1.1's GetSchemaTable() - this does something very similar. Obvioulsy it is not that powerful as GetSchema()
dominick - Anonymous
August 03, 2004
Thanks for the posting !, Good to see lot of stuff that we have been coding is being given off the shelf - Anonymous
August 04, 2004
Bill,
I am not sure I understand the question, GetSchema is a method of the Connection and the scope of the schema you retrieve is set by the connection. When you GetSchema("Databases") you will get all databases for the Sql Server that you are connected to, when you GetSchema("tables") you will only see tables for the database you are currently connected to. Makes sense?
dominick,
Good point, GetOledbSchemaInfo was not the only tool we had before GetSchema, please note that GetSchemaTable is a method off of the datareader and it is useful for some table schema information and little else.
rcallaby, steeven and Krishna
thanks for your comments! - Anonymous
August 04, 2004
Yep, that's exactly what I was asking - Thanks! - Anonymous
June 16, 2006
The comment has been removed - Anonymous
June 16, 2006
The comment has been removed