【问题标题】:Enumerate tables in iSeries DB2 from C#/ODBC从 C#/ODBC 枚举 iSeries DB2 中的表
【发布时间】:2016-03-09 06:25:27
【问题描述】:

我需要枚举我有 ODBC 连接的 iSeries DB2 数据库(我相信版本 7,但我可能是错的)中的所有表(我的意思是获取模式和表名字符串的列表)和视图.我试过了:

show tables
select * from syscat.tables

但是,服务器分别以未知命令响应show tables 和未知表用于选择:

错误 [42S02] [IBM][System i Access ODBC 驱动程序][DB2 for i5/OS]SQL0204 - TABLES in SYSCAT type *FILE not found

我知道枚举表是有可能的,因为 Visual Studio 是从服务器资源管理器中完成的。我可能忽略了一些非常明显的东西,但我并不真正精通 ODBC。谢谢。

【问题讨论】:

  • “枚举”如何? syscat.tablescontents 是一大堆信息,包括名称。如果不查看文档,我猜您不能使用 SQL 语句作为 show tables 的参数(假设这是一个有效的命令,我必须检查)。或者,您必须指定哪一列具有表/模式名称(您无法使用SELECT *。为什么还要枚举所有表?为什么通过服务器资源管理器查找它还不够?
  • 数据库很大,有 3000 多张表,我需要提供一份报告,其中有任何数据。我可以轻松地在表上执行count(*),但为此我需要一个表名列表。
  • 顺便说一句,没有syscat.tables 表。尝试对其进行选择会返回 ERROR [42S02] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0204 - TABLES in SYSCAT type *FILE not found
  • 嗯,看来我现在忘记了所有的前缀。顺便说一句,如果表在常规 i5/OS 土地上,SYSTABLESTAT 有行数。

标签: c# db2 odbc ibm-midrange


【解决方案1】:

根据manual,您可能想使用类似的东西

select table_name from sysibm.sqltables

【讨论】:

  • 好的,工作,你先回答,所以我会接受你的回答。虽然我找到了 VS 的一种方法,但 OdbcConnection 对象上有一个 GetSchema 方法,它返回模式特定部分的详细信息。例如。调用 conn.GetSchema("Tables"); 返回我需要的内容。
【解决方案2】:

要获取表名,请尝试 从 QSYS2.SYSTABLES 中选择 *

【讨论】:

  • 这不是一个糟糕的答案,它应该起作用。但是 SYSIBM 库(又名模式)明确用于 ODBC 和 JDBC 目录视图。 QSYS2 库用于 DB2 for i、ANS 和 ISO 目录视图。我想这个想法是您的 ODBC 客户端可能支持也可能不支持后者。当我使用 Windows 的 Client Access(或 iSeries Access 或 IBM i Access)附带的 ODBC 驱动程序进行连接时,我碰巧自己使用了 QSYS2 的东西。
  • 其实它确实有效,sysibm 也有效,但是@mustaccio 先回答了,所以我会接受他的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多