错误 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”:无法将左值绑定到右值引用