我正在使用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;
}
我能够获得价值。我不能在这里硬编码,因为stmt
变量值是动态的。
我想我犯了一个愚蠢的错误。但无法找到答案。
在此先感谢。
答案 0 :(得分:0)
我认为问题在于陈述
EXEC SQL EXECUTE SELECTDATA INTO:mID;
应替换为
EXEC SQL SELECT DATA INTO :mID