首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLBindParameter和SQLExecute返回SQL_NEED_DATA

SQLBindParameter和SQLExecute返回SQL_NEED_DATA
EN

Stack Overflow用户
提问于 2015-09-18 20:03:07
回答 1查看 924关注 0票数 4

我正在开发一个与运行在Windows2008 R2上的mssql数据库交互的C应用程序。我能够连接到数据库并运行特定的查询,但是当我使用SQLBindParameter时,一切都变得一团糟。

我在stackoverflow上发现了一篇文章,似乎是同样的问题,但解决方案似乎并不相同(Problems getting SQLBindParameter to work in C++)。根据C数据类型,SQL_C_CHAR是正确的(https://msdn.microsoft.com/en-us/library/windows/desktop/ms714556(v=vs.85).aspx

以下是代码

代码语言:javascript
复制
    SQLINTEGER strlentemp = SQL_NTS;
    SQLCHAR *sqlstmt = "select * from detail where name = ?";
    status = SQLPrepare(hstmt->hstmt, sqlstmt, SQL_NTS);
    unsigned char *temp = "myvalue";
    status = SQLBindParameter(hstmt->hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50,0,temp,strlen(temp),&strlentemp);
    status = SQLExecute(hstmt->hstmt);

SQLExecute将返回99,SQL_NEED_DATA。如果我在SQLExecute之后调用SQLParamData,它也会返回99,并且ValuePtrPtr (第二个参数)是我传递的数据(temp)。

有什么想法吗?我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 08:45:32

如果SQLBindParameter()成功,但SQLExecute()返回SQL_NEED_DATA,则说明SQLBindParameter()的用法不正确,通常是值大小或字段大小。

对于ANSI和宽字符串,请尝试以下代码:

代码语言:javascript
复制
SQLRETURN SQLBindStringW(SQLHSTMT hstmt, SQLUSMALLINT ipar, LPCWSTR szString)
{
    SQLRETURN ret;
    SQLULEN len;
    SQLINTEGER size;
    SQLPOINTER pData;

    len = wcslen(szString);
    size = len * sizeof(WCHAR);
    pData = (SQLPOINTER)szString;
    StrLen = SQL_NTSL;
    ret = ::SQLBindParameter(hstmt, ipar, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WVARCHAR, len, 0, pData, size, &StrLen);
    return ret;
}

SQLRETURN SQLBindStringA(SQLHSTMT hstmt, SQLUSMALLINT ipar, LPCSTR szString)
{
    SQLRETURN ret;
    SQLULEN len;
    SQLINTEGER size;
    SQLPOINTER pData;

    len = strlen(szString);
    size = len * sizeof(CHAR);
    pData = (SQLPOINTER)szString;
    StrLen = SQL_NTSL;
    ret = ::SQLBindParameter(hstmt, ipar, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, len, 0, pData, size, &StrLen);
    return ret;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32655466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档