sql - 使用 OLEDB select 语句获取错误值

标签 sql database oracle visual-c++ oledb

我在本地运行 Oracle 11g2 32b,并通过代码连接到它。我使用 VC++ 并与 OLE DB 连接。连接工作正常(终于),我可以毫无问题地将数据插入到我的表中。

然而,我遇到问题的地方是获取数据。我有一个名为 ITEM 的表只是为了测试我的东西。我使用 CCommand。命令执行,我的命令实际上包含数据。事实上,它包含正确数量的列和行;但是,它似乎不包含正确的数据。

当我运行它时,我应该得到编号为 4 到 10 的 7 行,而我收到的是逐渐增加和远离的值,介于 83 000 000 和 168 000 000 之间。当我尝试获取列名时,我也得到数字而不是字符串。

stringstream stream;
    string str;
    stream << "SELECT * FROM ITEM";
    str = stream.str();
    wstring commandText = s2ws(str);

    hr = cmd.Open(session, commandText.c_str());
    if(FAILED(hr)){
        cout << "Select failed." << endl; 
        //Cropped for brevity, closes connection and returns -1
    }else{
        cout << "Selection successful." << endl;
        hr = cmd.MoveFirst();
        int counter = 0;
        while(!FAILED(hr) && hr != DB_S_ENDOFROWSET){
            counter++;
            hr = cmd.MoveNext();
            cout << *(long*)(cmd.GetValue(1)) << endl;
        }
        cout << "Number of entries : " << counter << endl;
    }

我首先认为这可能是数据类型问题(我的列在 Oracle 中的数据类型是 INTEGER),所以我尝试了不同的类型而不是“long”,但无济于事。

提前致谢。

编辑:我能够在另一个测试表上检索到 VARCHAR,但我仍在为数字而苦苦挣扎。

编辑:进一步的测试表明 4 个不同的数字 DBTYPE 都读取了不同的离谱数字。

编辑:我能够将数字作为字符串读取并在我的代码中将它们转换回 int。这完全是荒谬的,但它确实有效。如果有人想出办法,我仍然想知道正确的做法,但在那之前,这是必须要做的。

最佳答案

我怀疑您的转换遇到了字节序问题。尝试使用 GetValue 的模板化(参见 CDynamicAccessor::GetValue )形式获取数字。

关于sql - 使用 OLEDB select 语句获取错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821590/

相关文章:

php - 是否可以在 SQL 表中包含 SQL 表? (对于动态生成的表单)

mysql - 两列,相同的数据,不同的Where子句

c# - 如何在现有业务数据之上创建 odbc 层?

mysql - 为什么 MariaDB 上的 CHECK 语句在 Windows 上有效,而在 Linux 上无效?

mysql - Oracle/MYSQL : Sort records from a select query on a column that contains alphanumeric values

sql - 由 SQL 解析引起的 Oracle 响应延迟

Oracle BLOB 到 base64 CLOB

mysql - 进行DynamoDB跨区域表复制时是否可以重叠重复项?

sql - 是否可以按行组合进行分组?

关于提供的绑定(bind)数量的 Python sqlite3 错误