【问题标题】:How can I get schema information about a UniData/UniVerse database?如何获取有关 UniData/UniVerse 数据库的架构信息?
【发布时间】:2013-05-17 17:51:15
【问题描述】:

我对 UniData 和 UniVerse 数据库有一些(有限的)经验,现在想通过 .NET 框架使用它们。看来现在使用它们的方式是通过 Rocket Software 的 U2 Toolkit for .NET。

由于我将访问我不知道先验架构的数据库,因此我需要知道如何查询数据库,不仅是获取数据(稍后会介绍),还需要了解有关数据库本身的信息,例如现有表的名称及其架构。

看起来可能 Rocket(或者之前拥有 U2 技术的 IBM)在他们的一些实用程序中内置了一些功能,但我确实需要能够以编程方式执行此操作。

有什么想法吗?

【问题讨论】:

    标签: multivalue u2 universe unidata u2netdk


    【解决方案1】:

    U2 Toolkit for .NET v1.3.0 支持 GetSchema() API 中的“ForeignKeys”和“ForeignKeysColumns”。 见下图1、图2、图3、图4。

    【讨论】:

    • Rajan,我可以调用无参数的 GetSchema() 方法,但是当尝试使用上面的代码时,我得到以下信息:[U2][UCINET-UO] [U2][UCINET][UNIVERSE ]:"*HS.OLEDBINFO" 不在 CATALOG 空间中。
    • 您可以以管理员身份运行您的应用程序吗?你的宇宙版本是什么?什么是操作系统(UniVerse)?你安装了 v1.3.0 吗?我以前从未见过这个错误。
    • 我联系了 u2askus@rocketsoftware.com,显然 UniVerse PE 的最新安装程序存在问题。 UniData PE 似乎还可以。
    【解决方案2】:

    您可以通过以下方式使用 U2 Toolkit for .NET 访问 U2 数据库(UniData 或 UniVerse):

    1. SQL 访问(UCI 服务器)
    2. 本机访问(UO 服务器)

    SQL 访问

    对于 SQL Access,您需要规范化 U2 帐户(获取架构)。为此,您可以使用以下工具:

    1. HS.ADMIN(用于 UniVerse 数据库)(http://www.rocketsoftware.com/u2/products/u2-clients-and-db-tools/u2-resources/universe-11.1-clients/copy_of_uvodbc-v11r1.pdf/view)
    2. VSG(用于 UniData 数据库)
    3. MDM(适用于 UniVerse 数据库和 UniData 数据库)

    您可以使用 U2 Toolkit for .NET 的 U2 Database Provider for .NET (ADO.NET Provider) 进行 SQL 访问

    本机访问

    对于 Native Access,您无需执行任何操作。

    您可以使用 U2 Toolkit for .NET 的 UO API for Native Access。

    示例代码和 MSDN 样式帮助

    在安装产品时,有大量关于 SQL Access 和 Native Access 的示例代码。

    对您来说最好的办法是安装 U2 Toolkit for .NET V 1.2.1 并开始开发一些代码。您可以运行几乎所有示例,因为它使用示例数据库(“HS.SALES”UniVerse 帐户和“演示”UniData 帐户)

    您还可以阅读 U2 Toolkit for .NET V 1.2.1 的 MSDN 样式帮助,了解架构、帐户可访问/获取架构、示例代码等信息。

    我已经使用 UniData 的演示帐户测试了 U2Connection 类的 GetSchema()。这个对我有用。请参阅下面的屏幕截图。

    private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                U2ConnectionStringBuilder conn_str = new U2ConnectionStringBuilder();
                conn_str.UserID = "user";
                conn_str.Password = "pass";
                conn_str.Server = "localhost";
                conn_str.Database = "demo";
                conn_str.ServerType = "UNIDATA";
                conn_str.Pooling = false;
                string s = conn_str.ToString();
                U2Connection con = new U2Connection();
                con.ConnectionString = s;
                con.Open();
                this.textBox2.AppendText("Connected......."+Environment.NewLine);
                this.textBox2.AppendText("CALLING .......   DataTable dt = con.GetSchema(\"Tables\");"+Environment.NewLine);
                DataTable dt = con.GetSchema("Tables");
                this.dataGridView1.DataSource = dt.DefaultView;
                con.Close();
                            }
            catch (Exception e2)
            {
    
                this.textBox2.AppendText(e2.Message);
            }
        }
    

    您的“模拟”帐户似乎未标准化。你能运行“sql> select * from SQLTables;”吗?来自 TCL 命令。你看到以下内容了吗? 如果没有,那么您可以执行以下操作之一:

    1. 运行 VSG 工具(阅读 VSG 手册)
    2. 运行 MDM 工具(阅读 MDM 手册)
    3. 从 TCL 命令运行命令行:

       o    Convert.sql STUDENT (Read Unidata  Manual for convert.sql command)
       o    Grant privilege
       o    MIGRATE.SQL
      

    【讨论】:

    • 拉詹 - 谢谢你的帮助。这当然让我朝着正确的方向前进。我已经成功连接到我的本地数据库,但我正在寻找的特定内容(即以编程方式获取所有表的列表)仍然让我望而却步。我想我需要使用 GetSchema() 方法,但是当我将它传递给 U2MetaDataCollectionNames.Tables 时,我没有返回任何行。这是针对演示 Unidata 数据库运行的。
    • 请看我上面的回答。
    • 再次感谢拉詹。我在使用 UniVerse 时运气更好。或许这值得提出一个新问题,但是有没有什么办法可以确定 GetSchema 方法返回的哪些表是其他表的子表呢?例如,在 HS.SALES 中,有一个 CUSTOMER 表,我相信它包含一个 MV_ORDERS 表。调用 GetSchema 时,其中两个表是 CUSTOMER(这是有道理的)和 CUSTOMER_ORDERS。我可以根据命名约定推断它们的关系吗?
    • 是的,你可以。但在这种情况下,HS.SALES 是规范化帐户。这就是您看到 CUSTOMER 和 CUSTOMER_ORDER 表的原因。
    • 听起来,如果我错了,请纠正我,没有很好的方法来获得一个可以传达 U2 数据库的层次结构的 DataTable(或其他结构)。最终,我想以树状结构呈现数据库的结构(即“主”表、多值和子多值表)。根据命名约定,我对这样做有点谨慎。我在这里遗漏了一些明显的东西吗?到目前为止,我看到的是一个表列表,所有表都在同一级别,在 DataTable 中,由我来解决。我觉得必须有某种方法可以使用 API 来做到这一点。
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多