SQL Server不返回表的所有列

时间:2018-05-18 13:58:22

标签: sql-server mfc odbc recordset tablecolumn

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

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

在MoveNext()之后,m_bEOF的值为true。但是,以下代码在检索表列的情况下正常运行应该是错误的。

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

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

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

亲切的问候

1 个答案:

答案 0 :(得分:0)

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

我的代码:

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

MS Access:

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

所以我将SQLColumns()的参数更改为仅提供表名,而不再提供数据库和所有者。

旧代码:

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。