错误 C2664:“SQLGetData”:无法将参数 6 从“SDWORD *”转换为“SQLLEN *”

Posted

技术标签:

【中文标题】错误 C2664:“SQLGetData”:无法将参数 6 从“SDWORD *”转换为“SQLLEN *”【英文标题】:error C2664: 'SQLGetData' : cannot convert parameter 6 from 'SDWORD *' to 'SQLLEN *' 【发布时间】:2012-12-17 22:03:33 【问题描述】:

我有在 Visual Studio 2008 上以 32 位模式编译的代码。现在我试图在 64 位模式下编译它。 我遇到此错误的地方是:

SDWORD temp=0;
SDWORD & readlen = (pValue?*pValue:temp); 
retValue=::SQLGetData(hStatement,mCurrentCol=column,cType,actualbuff,len,&readlen);

我试图用谷歌搜索错误消息,但没有找到我可以使用的解决方案。谁能帮我这个。 有什么方法可以将 SDWORD 类型转换为 SQLLEN?

【问题讨论】:

【参考方案1】:

第六个参数的实际类型是 SQLGetData 是 SQLLEN*。 MS 的文档也使用 SQLINTEGER*。您的代码将其视为 SDWORD*。这是一个简单的转换 IF SQLLEN 和 SDWORD 具有相同的基础数据类型。但是,如果 SQLLEN 是 64 位宽的值,而 SDWORD 是 32 位宽的,那么强制转换就不够了。在这种情况下,您可以尝试:

SQLLEN length=0;
retValue=::SQLGetData(hStatement,mCurrentCol=column,cType,actualbuff,len,&length);
if (pValue)
    *pValue = length;

【讨论】:

如果pValue不为null,如何将值赋给length??在旧代码中它是 SDWORD & readlen = (pValue?*pValue:temp); 因为 pValue 在旧代码中以 SDWORD 形式出现,所以我尝试将大小写从 SDWORD 输入到 SQLLEN,但 SDWORD 是 32 位,而 SQLLEN 是 64 位。 试试 *pValue = (SDWORD)length; 该类型将长度值转换为 pValue,这里的长度是 SQLLEN 和 pValue SDWORD。我需要使用 SQLLEN,有没有办法从 pValue SDWORD 类型转换为长度类型 SDWORD。 SDWORD 是 32 位的,SQLLEN 是 64 位的,会报错!!:( warning C4312: 'type cast' : conversion from 'SDWORD' to 'SQLLEN *' of greater size 很抱歉,这是警告消息而不是错误消息。但是我还是担心会不会疼!! SQLLEN temp=0; SQLLEN readlen = (pValue?*pValue:temp); retValue=::SQLGetData(hStatement,mCurrentCol=column,cType,actualbuff,len,&readlen); 我没有看到任何警告或错误,但此时我不确定是否有任何运行时错误,因为 pValue 是 SDWORD 类型。

以上是关于错误 C2664:“SQLGetData”:无法将参数 6 从“SDWORD *”转换为“SQLLEN *”的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2664:无法将参数 1 从“int”转换为“int []”

错误 C2664:无法将参数 2 从 'const ATL::CAdapt<ATL::CComPtr<IZipFileEntry>> *' 转换为 'ATL::CAdapt&l

error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [9]”转换为“LPCTSTR”

VS2012 error C2664: “std::make_pair”:无法将左值绑定到右值引用

为啥我会收到错误错误 C2664:'reverseString'

OpenGL 中的错误 C2664 和 C2597 以及 C++ 中的 DevIL