CUBRID学习笔记 16 元数据支持

简化了很多 ,在sqlserver需要用语句实现的功能

接口如下

public DataTable GetDatabases(string[] filters)
public DataTable GetTables(string[] filters)
public DataTable GetViews(string[] filters)
public DataTable GetColumns(string[] filters)
public DataTable GetIndexes(string[] filters)
public DataTable GetIndexColumns(string[] filters)
public DataTable GetExportedKeys(string[] filters)
public DataTable GetCrossReferenceKeys(string[] filters)
public DataTable GetForeignKeys(string[] filters)
public DataTable GetUsers(string[] filters)
public DataTable GetProcedures(string[] filters)
public static DataTable GetDataTypes()
public static DataTable GetReservedWords()
public static String[] GetNumericFunctions()
public static String[] GetStringFunctions()
public DataTable GetSchema(string collection, string[] filters)

获取数据库
CUBRIDSchemaProvider schema = new CUBRIDSchemaProvider(conn);
DataTable dt = schema.GetTables(new string[] { "%" });
Debug.Assert(dt.Columns.Count == 3);
Debug.Assert(dt.Rows.Count == 10);
Debug.Assert(dt.Rows[0][0].ToString() == "demodb");
Debug.Assert(dt.Rows[0][1].ToString() == "demodb");
Debug.Assert(dt.Rows[0][2].ToString() == "stadium");

获取表的外键
CUBRIDSchemaProvider schema = new CUBRIDSchemaProvider(conn);
DataTable dt = schema.GetForeignKeys(new string[] { "game" });
Debug.Assert(dt.Columns.Count == 9);
Debug.Assert(dt.Rows.Count == 2);
Debug.Assert(dt.Rows[0][0].ToString() == "athlete");
Debug.Assert(dt.Rows[0][1].ToString() == "code");
Debug.Assert(dt.Rows[0][2].ToString() == "game");
Debug.Assert(dt.Rows[0][3].ToString() == "athlete_code");
Debug.Assert(dt.Rows[0][4].ToString() == "1");
Debug.Assert(dt.Rows[0][5].ToString() == "1");
Debug.Assert(dt.Rows[0][6].ToString() == "1");
Debug.Assert(dt.Rows[0][7].ToString() == "fk_game_athlete_code");
Debug.Assert(dt.Rows[0][8].ToString() == "pk_athlete_code");

获取索引
CUBRIDSchemaProvider schema = new CUBRIDSchemaProvider(conn);
DataTable dt = schema.GetIndexes(new string[] { "game" });

Debug.Assert(dt.Columns.Count == 9);
Debug.Assert(dt.Rows.Count == 5);

Debug.Assert(dt.Rows[3][2].ToString() == "pk_game_host_year_event_code_athlete_code"); //verify index name
Debug.Assert(dt.Rows[3][4].ToString() == "True"); //Is it a primary key?

完整例子
using CUBRID.Data.CUBRIDClient;
using System.Diagnostics;
using System.Data;

namespace MetadataExample
{
    class Program
    {
        static void Main(string[] args)
        {
            CUBRIDConnectionStringBuilder sb = new CUBRIDConnectionStringBuilder("localhost", "demodb", "public", "", "33000");
            using (CUBRIDConnection conn = new CUBRIDConnection(sb.GetConnectionString()))
            {
                conn.Open();

                CUBRIDSchemaProvider schema = new CUBRIDSchemaProvider(conn);

                //get tables example
                using (DataTable dt = schema.GetTables(new string[] { "%" }))
                {
                    Debug.Assert(dt.Columns.Count == 3);
                    Debug.Assert(dt.Rows.Count == 10);

                    Debug.Assert(dt.Rows[0][0].ToString() == "demodb");
                    Debug.Assert(dt.Rows[0][1].ToString() == "demodb");
                    Debug.Assert(dt.Rows[0][2].ToString() == "stadium");
                }

                //get columns example
                using (DataTable dt = schema.GetColumns(new string[] { "game" }))
                {
                    Debug.Assert(dt.Columns.Count == 11);
                    Debug.Assert(dt.Rows.Count == 7);

                    Debug.Assert(dt.Rows[0][3].ToString() == "host_year");
                    Debug.Assert(dt.Rows[1][3].ToString() == "event_code");
                }

                //get users example
                using (DataTable dt = schema.GetUsers(null))
                {
                    Debug.Assert(dt.Columns.Count == 1);
                    Debug.Assert(dt.Rows.Count >= 2);

                    Debug.Assert(dt.Rows[0][0].ToString().ToUpper() == "DBA");
                    Debug.Assert(dt.Rows[1][0].ToString().ToUpper() == "PUBLIC");
                }

                //get views example
                using (DataTable dt = schema.GetViews(null))
                {
                    Debug.Assert(dt.Columns.Count == 3);
                    Debug.Assert(dt.Rows.Count == 0);
                }

                //get foreign keys example
                using (DataTable dt = schema.GetForeignKeys(new string[] { "game" }))
                {
                    Debug.Assert(dt.Columns.Count == 9);
                    Debug.Assert(dt.Rows.Count == 2);

                    Debug.Assert(dt.Rows[0][0].ToString() == "athlete");
                    Debug.Assert(dt.Rows[0][1].ToString() == "code");
                    Debug.Assert(dt.Rows[0][2].ToString() == "game");
                    Debug.Assert(dt.Rows[0][3].ToString() == "athlete_code");
                    Debug.Assert(dt.Rows[0][4].ToString() == "1");
                    Debug.Assert(dt.Rows[0][5].ToString() == "1");
                    Debug.Assert(dt.Rows[0][6].ToString() == "1");
                    Debug.Assert(dt.Rows[0][7].ToString() == "fk_game_athlete_code");
                    Debug.Assert(dt.Rows[0][8].ToString() == "pk_athlete_code");

                    Debug.Assert(dt.Rows[1][0].ToString() == "event");
                    Debug.Assert(dt.Rows[1][1].ToString() == "code");
                    Debug.Assert(dt.Rows[1][2].ToString() == "game");
                    Debug.Assert(dt.Rows[1][3].ToString() == "event_code");
                    Debug.Assert(dt.Rows[1][4].ToString() == "1");
                    Debug.Assert(dt.Rows[1][5].ToString() == "1");
                    Debug.Assert(dt.Rows[1][6].ToString() == "1");
                    Debug.Assert(dt.Rows[1][7].ToString() == "fk_game_event_code");
                    Debug.Assert(dt.Rows[1][8].ToString() == "pk_event_code");
                }

                //get indexes example
                using (DataTable dt = schema.GetIndexes(new string[] { "game" }))
                {
                    Debug.Assert(dt.Columns.Count == 9);
                    Debug.Assert(dt.Rows.Count == 5);

                    Debug.Assert(dt.Rows[3][2].ToString() == "pk_game_host_year_event_code_athlete_code"); //Index name
                    Debug.Assert(dt.Rows[3][4].ToString() == "True"); //Is PK?
                }

                conn.Close();
            }
        }
    }
}

欢迎转载 ,转载时请保留作者信息。本文版权归本人所有,如有任何问题,请与我联系[email protected] 。 过错

adonet的api http://www.cubrid.org/manual/api/ado.net/8.4.1/Index.html

				
时间: 2024-10-12 17:43:29

CUBRID学习笔记 16 元数据支持的相关文章

Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行

Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之后,在Ext.Net GridPanel的行头会出现一个展开图标,点击图标以后能够将这一行展开: 使用XTemplate实现行折叠/展开 这是最简单的一种实现,我们只需要在GridPanel的定义中加入下面的代码: <Plugins> <ext:R

python基础教程_学习笔记16:标准库:一些最爱——random

标准库:一些最爱 random random模块包括返回随机数的函数,可以用于模拟或者用于任何产生随机输出的程序. 事实上,所产生的数字都是伪随机数,它们以一个可预测的系统作为基础,除非是为了强加密的目标,否则这些随机数还是足够随机的.如果真的需要随机性,可以使用os模块的urandom函数. 重要函数 函数 描述 random() 返回0<=n<1之间的随机实数n,其中0<n<=1 getrandbits(n) 以长整型形式返回n个随机位(二进制数) uniform(a,b) 返

springmvc学习笔记(16)-异常处理器

springmvc学习笔记(16)-异常处理器 springmvc学习笔记16-异常处理器 异常处理思路 自定义异常类 全局异常处理器 错误页面 在springmvcxml配置全局异常处理器 异常测试 本文主要介绍springmvc中异常处理的思路,并展示如何自定义异常处理类以及全局异常处理器的配置 异常处理思路 系统中异常包括两类: 预期异常 运行时异常RuntimeException 前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的dao

springmvc学习笔记(19)-RESTful支持

springmvc学习笔记(19)-RESTful支持 springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控制器配置 对静态资源的解析 本文介绍RESTful的概念,并通过一个小样例展示怎样编写RESTful风格的controller和配置前端控制器,最后展示静态资源的解析 概念 首先附上两篇博客链接 理解RESTful架构 - 阮一峰的网络日志 RESTful API 设计指南- 阮一峰的网络日志 RESTful架构.就是眼下最流

[原创]java WEB学习笔记16:JSP指令(page,include),JSP标签(forwar,include,param)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

前端学习笔记--16/5~22/5 jQuery,HTML5+CSS3+JS 简易微信贺卡开发

先写一下上周的总结,基本上没有偷懒,每天都有认真学习前端知识.但是有一点目标不清晰.我上周订下来的计划只完成了50%,即是只完成了坐H5+CSS3+JS的小demo.imooc上的jQuery练习并没有完成,而且还差不少. 周六去了一天潜江吃大虾,不过作为弥补,星期天一整天又把缺的时间补回来了. 至于健身,上周属于间隔期,不过在周日这些计划也都重新启动了.到今天也已经完成了执行. 下面来单步跟踪一下每天学的只是吧. 5.16 jQuery使用each()方法遍历元素. 语法: $(selecto

ArcGIS API for JavaScript 4.2学习笔记[16] 弹窗自定义功能按钮及为要素自定义按钮(第五章完结)

这节对Popups这一章的最后两个例子进行介绍和解析. 第一个[Popup Actions]介绍了弹窗中如何自定义工具按钮(名为actions),以PopupTemplate+FeatureLayer的形式测量要素的长度为例子进行介绍. 第二个[Custom popup actions per feature]则是上一个的升级,如果说上一个例子的功能是写死的,那么这个例子就把这个功能写活了.什么意思呢?上个例子的测距仅仅能测距,没有什么别的特别的.而这个例子以啤酒店的分布(点要素图层)为例,在自

Hadoop学习笔记—16.Pig框架学习

一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算.Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口. Compare:相比Java的MapReduce API,Pig为大型数据集的处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构.

JPA学习笔记(16)——JPA高级

1.JPA的实体生命周期: JPA的实体有以下4中生命周期状态: (1).New:瞬时对象,尚未有id,还未和Persistence Context建立关联的对象. (2).Managed:持久化受管对象,有id值,已经和Persistence Context建立了关联的对象. (3).Datached:游离态离线对象,有id值,但没有和Persistence Context建立关联的对象. (4).Removed:删除的对象,有id值,尚且和Persistence Context有关联,但是已