c++ - EXEC SQL EXECUTE INTO 什么都不返回

标签 c++ sql oracle-pro-c

我正在使用 C++ 程序连接到 SQL Server 并获取数据。 下面是代码...

string temp = "SELECT WERT FROM AM_TABLE WHERE CD=\'" + prefix + "\'"; // prefix = BADGUN
strcpy((char*)stmt.arr, temp.c_str());
stmt.len = strlen((char*) stmt.arr );
stmt.arr[stmt.len]= '\0';

EXEC SQL DECLARE SELECTDATA STATEMENT;
EXEC SQL PREPARE SELECTDATA FROM :stmt;

cout << "Statement is :" << (char*)stmt.arr << endl;
// SELECT WERT FROM AM_TABLE WHERE CD='BADGUN'

if( sqlca.sqlcode != 0 )
{
    cout << "Code: " << sqlca.sqlcode << " Message: "<< (char*) sqlca.sqlerrm.sqlerrmc << endl;
}
EXEC SQL EXECUTE SELECTDATA INTO:mID;

if( sqlca.sqlcode != 0 )
{
    cout << "Code: " << sqlca.sqlcode << " Message: "<< (char*) sqlca.sqlerrm.sqlerrmc << endl;
}

cout << "mID: " << (char*)mID.arr) << endl;

一切都正确执行,没有任何错误。如果我手动执行查询,查询会按预期返回一个 ID。但是在上面的程序中,变量mID什么都没有。

我在这里做错了吗?

编辑

我也试过...

string temp = "\'" + prefix + "\'";
strcpy((char*)stmt.arr, temp.c_str());
stmt.len = strlen((char*) stmt.arr );
stmt.arr[stmt.len]= '\0';
EXEC SQL SELECT WERT INTO:mID
    FROM AM_TABLE 
    WHERE CD=:stmt;
if( sqlca.sqlcode != 0 )
{
    cout << "Code: " << sqlca.sqlcode << " Message: "<< (char*) sqlca.sqlerrm.sqlerrmc << endl;
}  

但是没有成功...

但是当我硬编码 stmt 的值时...

EXEC SQL SELECT WERT INTO:mID
    FROM AM_TABLE 
    WHERE CD='BADGUN';
if( sqlca.sqlcode != 0 )
{
    cout << "Code: " << sqlca.sqlcode << " Message: "<< (char*) sqlca.sqlerrm.sqlerrmc << endl;
}  

我能够获得值(value)。我不能在这里硬编码,因为 stmt 变量值是动态的。 我想我犯了一个愚蠢的错误。却查不出来。 提前致谢。

最佳答案

我认为问题出在语句上

EXEC SQL EXECUTE SELECTDATA INTO:mID;

应该替换为

EXEC SQL SELECT DATA INTO :mID

关于c++ - EXEC SQL EXECUTE INTO 什么都不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483821/

相关文章:

c++ - thrift-0.9.3 包 C++ 构建问题。使用哪些 boost 包?

c++ - 在这种情况下溢出意味着什么?

总结类实例时 C++ 崩溃

sql - 报告查看器 10.0.0.0 呈现报告问题

c# - 驱动程序和提供程序之间的区别

c++ - C++ 中的扩展内联汇编 : Is it necessary to preserve volatile registers?

MySQL:遍历一个表并更新另一个表?

c - Pro*C 过程调用无限期挂起

c - PRO*C编译错误注释

c - 基于 Pro*C 的批处理,内存不足?