SQLBindCol没有关问题啊但是为什么不能Fetch?救!多谢大牛们!
SQLBindCol没问题啊,但是为什么不能Fetch???急救!!!谢谢大牛们!!!
代码部分:
int real_ID;//记录查询到的会员编号
char real_pwd[20];//记录查询到的会员密码
long lenOut1, lenOut5;
RETCODE error;
HENV env;//环境句柄
HDBC conn;//连接句柄
HSTMT stmt;//语句句柄
error = SQLAllocEnv(&env);//初始化ODBC环境,返回环境句柄
error = SQLAllocConnect(env, &conn);//为连接句柄分配内存,返回连接句柄
error = SQLConnect(conn, (SQLWCHAR*)L"restaurant", SQL_NTS, (SQLWCHAR*)L"sa", SQL_NTS, (SQLWCHAR*)L"", SQL_NTS);//连接一个SQL数据源
error = SQLAllocStmt(conn, &stmt);//为语句句柄分配内存,并返回连接句柄
SQLWCHAR query2[200] = L"select ID, pwd from MEMBERSHIP where ID = 1 and pwd = 'furongrong'";
error = SQLExecDirect(stmt, query2, SQL_NTS);//把SQL语句送到数据库服务器,请求执行由SQL语句请求的数据库访问
//error = SQLExecDirect(stmt, query, SQL_NTS);//把SQL语句送到数据库服务器,请求执行由SQL语句请求的数据库访问
if (error == SQL_SUCCESS)
{
error = SQLBindCol(stmt, 1, SQL_C_LONG, &real_ID, 0, (SQLINTEGER*)&lenOut1);
error = SQLBindCol(stmt, 5, SQL_C_CHAR, real_pwd, sizeof(real_pwd), (SQLINTEGER*)&lenOut5);//有问题的地方!!!
error = SQLFetch(stmt);
while (SQLFetch(stmt) == SQL_SUCCESS)
{
cout << real_ID << "***" << real_pwd << endl;
char* real_ID_ch = NULL;
real_ID_ch = new char[8];
itoa(real_ID, real_ID_ch, 10);
if (((*real_ID_ch) == (*ID)) && ((*real_pwd) == (*pwd)))
{
result = true;
delete []real_ID_ch;
real_ID_ch = NULL;
break;
}
else
{
result = false;
}
}
}
SQLFreeStmt(stmt, SQL_DROP);//释放与语句句柄相关的资源
SQLDisconnect(conn);//切断连接
SQLFreeConnect(conn);//释放与连接句柄相关的资源
SQLFreeEnv(env);//释放与环境句柄相关的资源
……
问题是:
我如果只绑定第一列,是可以Fetch成功的;如果再绑定了第5列(pwd列),就导致Fetch返回-1了。这是什么回事啊!!!救命啊~谢谢!
------解决方案--------------------
5 改为 2
Bind的是结果集的列
而不是数据库表的列
------解决方案--------------------
楼上正解!!
error = SQLBindCol(stmt, 1, SQL_C_LONG, &real_ID, 0, (SQLINTEGER*)&lenOut1);
中间加上
error = SQLBindCol(stmt, 2, ......);
error = SQLBindCol(stmt, 3, ......);
error = SQLBindCol(stmt, 4, ......);
error = SQLBindCol(stmt, 5, SQL_C_CHAR, real_pwd, sizeof(real_pwd), (SQLINTEGER*)&lenOut5);//有问题的地方!!!
代码部分:
int real_ID;//记录查询到的会员编号
char real_pwd[20];//记录查询到的会员密码
long lenOut1, lenOut5;
RETCODE error;
HENV env;//环境句柄
HDBC conn;//连接句柄
HSTMT stmt;//语句句柄
error = SQLAllocEnv(&env);//初始化ODBC环境,返回环境句柄
error = SQLAllocConnect(env, &conn);//为连接句柄分配内存,返回连接句柄
error = SQLConnect(conn, (SQLWCHAR*)L"restaurant", SQL_NTS, (SQLWCHAR*)L"sa", SQL_NTS, (SQLWCHAR*)L"", SQL_NTS);//连接一个SQL数据源
error = SQLAllocStmt(conn, &stmt);//为语句句柄分配内存,并返回连接句柄
SQLWCHAR query2[200] = L"select ID, pwd from MEMBERSHIP where ID = 1 and pwd = 'furongrong'";
error = SQLExecDirect(stmt, query2, SQL_NTS);//把SQL语句送到数据库服务器,请求执行由SQL语句请求的数据库访问
//error = SQLExecDirect(stmt, query, SQL_NTS);//把SQL语句送到数据库服务器,请求执行由SQL语句请求的数据库访问
if (error == SQL_SUCCESS)
{
error = SQLBindCol(stmt, 1, SQL_C_LONG, &real_ID, 0, (SQLINTEGER*)&lenOut1);
error = SQLBindCol(stmt, 5, SQL_C_CHAR, real_pwd, sizeof(real_pwd), (SQLINTEGER*)&lenOut5);//有问题的地方!!!
error = SQLFetch(stmt);
while (SQLFetch(stmt) == SQL_SUCCESS)
{
cout << real_ID << "***" << real_pwd << endl;
char* real_ID_ch = NULL;
real_ID_ch = new char[8];
itoa(real_ID, real_ID_ch, 10);
if (((*real_ID_ch) == (*ID)) && ((*real_pwd) == (*pwd)))
{
result = true;
delete []real_ID_ch;
real_ID_ch = NULL;
break;
}
else
{
result = false;
}
}
}
SQLFreeStmt(stmt, SQL_DROP);//释放与语句句柄相关的资源
SQLDisconnect(conn);//切断连接
SQLFreeConnect(conn);//释放与连接句柄相关的资源
SQLFreeEnv(env);//释放与环境句柄相关的资源
……
问题是:
我如果只绑定第一列,是可以Fetch成功的;如果再绑定了第5列(pwd列),就导致Fetch返回-1了。这是什么回事啊!!!救命啊~谢谢!
------解决方案--------------------
5 改为 2
Bind的是结果集的列
而不是数据库表的列
------解决方案--------------------
楼上正解!!
error = SQLBindCol(stmt, 1, SQL_C_LONG, &real_ID, 0, (SQLINTEGER*)&lenOut1);
中间加上
error = SQLBindCol(stmt, 2, ......);
error = SQLBindCol(stmt, 3, ......);
error = SQLBindCol(stmt, 4, ......);
error = SQLBindCol(stmt, 5, SQL_C_CHAR, real_pwd, sizeof(real_pwd), (SQLINTEGER*)&lenOut5);//有问题的地方!!!