protected override DataSet KeySchema(Table table, DataAccessProviderFactory dataAccessProvider, IDbConnection connection)
		{
			DataSet dsPkeys = new DataSet();
			IDbCommand sqlSp = dataAccessProvider.CreateCommand("sp_pkeys",connection);
			sqlSp.CommandType = CommandType.StoredProcedure;			
			IDbDataParameter param = dataAccessProvider.CreateParameter();			
			param.Direction = ParameterDirection.Input;
			param.DbType = DbType.String;
			param.ParameterName = "@table_name";
			param.Value = table.Name;
			sqlSp.Parameters.Add(param);
            IDbDataParameter schemaParameter = dataAccessProvider.CreateParameter();			
			schemaParameter.Direction = ParameterDirection.Input;
			schemaParameter.DbType = DbType.String;
			schemaParameter.ParameterName = "@table_owner";
			schemaParameter.Value = table.Schema;
			sqlSp.Parameters.Add(schemaParameter);
			IDbDataAdapter da = dataAccessProvider.CreateDataAdapter();
			da.SelectCommand = sqlSp;
			da.Fill(dsPkeys);
			foreach(DataRow row in dsPkeys.Tables[0].Rows)
			{
				Key key = new Key();
				key.Name = row["PK_NAME"].ToString();
				key.ColumnName = row["COLUMN_NAME"].ToString();
				key.IsPrimary = true;
				_Keys.Add(key);				
			}
	
			DataSet ds = new DataSet();			
			sqlSp = dataAccessProvider.CreateCommand("sp_fkeys",connection);
			sqlSp.CommandType = CommandType.StoredProcedure;			
			param = dataAccessProvider.CreateParameter();			
			param.Direction = ParameterDirection.Input;
			param.DbType = DbType.String;
			param.ParameterName = "@pktable_name";
			param.Value = table.Name;
			sqlSp.Parameters.Add(param);
			da = dataAccessProvider.CreateDataAdapter();
			da.SelectCommand = sqlSp;
			da.Fill(ds);
			ds.Merge(dsPkeys);
			return ds;
		}
		protected override DataSet ColumnSchema(Table table, DataAccessProviderFactory dataAccessProvider, IDbConnection connection)
		{
			DataSet ds = new DataSet();
			IDbCommand sqlSp = dataAccessProvider.CreateCommand("sp_columns",connection);
			sqlSp.CommandType = CommandType.StoredProcedure;			
			IDbDataParameter param = dataAccessProvider.CreateParameter();			
			param.Direction = ParameterDirection.Input;
			param.DbType = DbType.String;
			param.ParameterName = "@table_name";
			param.Value = table.Name;
			sqlSp.Parameters.Add(param);
            IDbDataParameter schemaParameter = dataAccessProvider.CreateParameter();			
			schemaParameter.Direction = ParameterDirection.Input;
			schemaParameter.DbType = DbType.String;
			schemaParameter.ParameterName = "@table_owner";
			schemaParameter.Value = table.Schema;
			sqlSp.Parameters.Add(schemaParameter);
			IDbDataAdapter da = dataAccessProvider.CreateDataAdapter();
			da.SelectCommand = sqlSp;
			da.Fill(ds);
			return ds;
		}
 protected override DataSet ViewSchema(DataAccessProviderFactory dataAccessProvider, IDbConnection connection)
 {
     DataSet ds = new DataSet();
     IDbCommand sqlSp = dataAccessProvider.CreateCommand("sp_tables", connection);
     sqlSp.CommandType = CommandType.StoredProcedure;
     IDbDataParameter param = dataAccessProvider.CreateParameter();
     param.ParameterName = "@table_type";
     param.Value = "'VIEW'";
     sqlSp.Parameters.Add(param);
     IDbDataAdapter da = dataAccessProvider.CreateDataAdapter();
     da.SelectCommand = sqlSp;
     da.Fill(ds);
     return ds;
 }