gpt4 book ai didi

c - SQLBindParameter 和 SQLExecute 返回 SQL_NEED_DATA

转载 作者:行者123 更新时间:2023-12-03 19:56:12 26 4
gpt4 key购买 nike

我正在开发一个与运行在 Windows 2008 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 )

这是代码

    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(第二个参数)是我通过的数据(临时)。

有什么想法吗?我错过了什么?

最佳答案

如果 SQLBindParameter() 成功但 SQLExecute() 返回 SQL_NEED_DATA,那么您对 ​​SQLBindParameter() 的使用不正确,通常是值大小或字段大小。

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

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;
}

关于c - SQLBindParameter 和 SQLExecute 返回 SQL_NEED_DATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com