SQL 服务器没有 return table 的所有列

SQL Server does not return all columns of a table

我有一个旧应用程序(使用 Visual C++ 6.0 构建)使用 MFC 和 RecordSets 使用 SQL ODBC 驱动程序访问 SQL Server 2016。该代码使用大量 MFC 函数来动态检索有关要访问的 table 的信息。打开 ColumnSet 时完成以下步骤。

...
SQLColumns(...);
AllocAndCacheFieldInfo();
AllocRowset();
MoveNext();
m_bBOF = m_bEOF;
...

在 MoveNext() 之后 m_bEOF 的值为真。但是下面的代码应该是错误的 运行 正确地检索了 table 列。

此(旧)代码运行与 MS Access 数据库和 Postgres 数据库配合得很好。所以我认为我的代码应该没问题。现在我会考虑配置数据库或 ODBC 驱动程序。但是:使用 MS Access link 到 SQL 数据库 table 使用相同的数据源工作正常。所有 table 都已成功列出。这意味着数据库工作正常,数据源也工作正常。

现在我有点困惑。我该怎么做才能让我的代码正常工作?我检查了 MFC 函数的 MSDN 站点,但没有找到任何更新代码的提示。

你们对我有什么帮助吗?我真的很感激。如果您需要更多信息,我会 post 提供。

亲切的问候

我使用 SQL 探查器找出任何差异,并得到了这些结果。

我的代码:

exec [MyDatabase].[sys].sp_columns_100 N'MyTable',N'sys',N'MyDatabase',NULL,@fUsePattern=1

MS 访问:

exec [sys].sp_columns_100 N'MyTable',N'dbo',NULL,NULL,@fUsePattern=1

所以我更改了 SQLColumns() 的参数以仅提供 table 名称,不再提供数据库和所有者。

旧代码:

SQLColumns(m_hstmt,
           (UCHAR FAR *)(const char*)m_strQualifierParam,
           SQL_NTS,
           (UCHAR FAR *)(const char*)m_strOwnerParam,
           SQL_NTS,
           (UCHAR FAR *)(const char*)m_strTableNameParam,
           SQL_NTS,
           NULL,
           SQL_NTS)

新代码:

SQLColumns(m_hstmt,
           (UCHAR FAR *)NULL,
           SQL_NTS,
           (UCHAR FAR *)NULL,
           SQL_NTS,
           (UCHAR FAR *)(const char*)m_strTableNameParam,
           SQL_NTS,
           NULL,
           SQL_NTS)

现在,当使用我的新代码时,探查器结果看起来像这样:

exec [sys].sp_columns_100 N'MyTable',NULL,NULL,NULL,@fUsePattern=1

并且有效。它还适用于 MS Access 和 PostgreSQL.