无法使用C ++和SQL检索数据

时间:2014-11-18 06:48:11

标签: c++ sql sql-server

我使用无dsn连接成功连接到SQL Server数据库。不幸的是,当我查询我的数据库时,它没有绑定我的id,种类和描述变量的值(即使你在我的代码中看到的正是我试图做的事情)。

我想从中选择的表格如下所示。出于某种原因,当我使用SQLExecDirect执行查询时,它要么不执行语句,要么将值绑定到我想要的id,种类和描述(在以下行中)。相反,我得到ID,Species,Description列名称(即因为它只是一个cout),但列名下面没有数据(即因为数据没有被正确绑定)。

MushroomID  Species                 Descript                Season

1           Matsutake               Matsutake               Fall
2           King Boletus            King Boletus            Fall
3           Scaber Stalk Bolete     Scaber Stalk Bolete     Fall
4           Chicken of the Woods    Chicken of the Woods    Fall
5           Chanterelle             Chanterelle             Fall
6           Lobster                 Lobster                 Fall

我已经多次介入,但不知道我在看什么。我是SQL的完整菜鸟,使用C ++是与SQL交互的噩梦。然而,就我而言。

代码中的while语句永远不会运行。由于某种原因,hstmt是0x0000,我不知道为什么。完整的代码如下所示。

#include <sql.h>
#include <sqlext.h>
#include <iostream>
#include <cstring>
using namespace std;

void main()
{
    SQLHANDLE henv;
    SQLHANDLE hdbc;
    SQLHANDLE hstmt;
    SDWORD cbQual;

    char * query = "USE MyName GO SELECT * FROM MyName.Mushroom;";
    char id[100], species[100], description[100];

    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
    SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    SQLConnect(hdbc, (unsigned char *)"MyServer.brown.edu", SQL_NTS, 
                 (unsigned char *)"MyName", SQL_NTS,
                 (unsigned char *)"MyName", SQL_NTS);
    SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    SQLExecDirect(hstmt, (unsigned char *)query, SQL_NTS);
    SQLBindCol(hstmt, 1, SQL_CHAR, id, 100, &cbQual);
    SQLBindCol(hstmt, 2, SQL_CHAR, species, 100, &cbQual);
    SQLBindCol(hstmt, 3, SQL_CHAR, description, 100, &cbQual);
    //SQLGetData (hstmt, 1, SQL_CHAR, id, 100, &cbQual);

    cout << "ID\tspecies\tDescription" << endl
        << "___\t________\t__________" << endl;
    while(!SQLFetch(hstmt))
        cout << id << '\t' << species << "\t\t" << description << '\t' << endl;

    SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    SQLFreeHandle(SQL_NULL_HANDLE, henv);
}

任何人都可以发现任何明显的错误,可能导致我的htsmt为0x00000000和id,种类和描述只包含垃圾吗?

0 个答案:

没有答案