无法使用 Oracle ODBC 执行查询
fails to execute a query using Oracle ODBC
我正在尝试执行查询"从双胞胎中选择 1"。但是在 SQLFetch 之后,ColumnData 中没有任何内容出现,因此分配了内存,函数返回成功。如果查询返回 varchar 类型,则效果很好。刚开始使用 ODBC,我真的很困惑,因为这个......
下面的代码
{
bool isDone = true;
Connect();
if(isConnected)
{
m_retcode = SQLExecDirect(m_hStmt, _queryText, SQL_NTS);
if (m_retcode == SQL_SUCCESS || m_retcode == SQL_SUCCESS_WITH_INFO)
{
m_retcode = SQLNumResultCols(m_hStmt, &numCols);
if (m_retcode == SQL_SUCCESS || m_retcode == SQL_SUCCESS_WITH_INFO)
{
for (i=0;i<numCols;i++)
{
ColumnName[i] = new SQLWCHAR[MAX_COL_NAME_LEN];
m_retcode = SQLDescribeCol(m_hStmt, i+1, ColumnName[i], MAX_COL_NAME_LEN, &ColumnNameLen[i], &ColumnDataType[i], &ColumnDataSize[i], &ColumnDataDigits[i], &ColumnDataNullable[i]);
if (m_retcode < 0 || m_retcode > 1)
{
ShowError(DESCRIBECOL);
}
printf("Column Name : %Sn SQL Data Type : %in Data Size : %inn", ColumnName[i], (int)ColumnDataType[i], (int)ColumnDataSize[i]);
ColumnData[i] = new SQLCHAR[ColumnDataSize[i]+2];
switch(ColumnDataType[i])
{
case SQL_VARCHAR:
ColumnDataType[i]=SQL_C_CHAR;
m_retcode = SQLBindCol(m_hStmt, i+1, ColumnDataType[i], ColumnData[i], ColumnDataSize[i]*2, &ColumnDataLen[i]);
if (m_retcode < 0 || m_retcode > 1)
{
ShowError(DESCRIBECOL);
}
break;
case SQL_DECIMAL:
ColumnDataType[i]=SQL_C_CHAR;
m_retcode = SQLBindCol(m_hStmt, i+1, ColumnDataType[i], ColumnData[i], sizeof(double)*sizeof(double), &ColumnDataLen[i]);
if (m_retcode < 0 || m_retcode > 1)
{
ShowError(DESCRIBECOL);
}
break;
case SQL_FLOAT:
ColumnDataType[i]=SQL_C_DOUBLE;
m_retcode = SQLBindCol(m_hStmt, i+1, ColumnDataType[i], ColumnData[i], ColumnDataSize[i], &ColumnDataLen[i]);
if (m_retcode < 0 || m_retcode > 1)
{
ShowError(DESCRIBECOL);
}
break;
}
}
printf ("Data Recordsn------------n");
for (i=0; ; i++)
{
m_retcode = SQLFetch(m_hStmt);
if (m_retcode == SQL_NO_DATA)
{
break;
}
printf ("nRecord %i n", i+1);
for (j=0; j<numCols; j++)
{
printf("Column %S : ", ColumnName[j]);
if (ColumnDataType[j]==SQL_C_CHAR || ColumnDataType[j]==SQL_C_DOUBLE)
{
SQLGetData(m_hStmt, j, ColumnDataType[j], ColumnData[j], MAX_LEN, 0);
printf("%sn", ColumnData[j]);
}
}
}
}
else
{
ShowError(NUMRESULTCOLS);
isDone = false;
}
}
else
{
ShowError(EXECDIRECT);
isDone = false;
}
}
else
{
printf("FAILED TO CONNECT");
}
Disconnect();
return isDone;
}
我没有详细查看您的代码,但我可以看到一些未声明的变量。从 dual 中选择 1 可能会返回整数的列类型,而您的 switch 语句没有涵盖这一点。我建议您在切换到您尚未涵盖的陷阱列类型中添加默认值(无论如何,这都是很好的编程实践)。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 如何在 c++ 中设置 ODBC 连接以执行多个查询 (SQLExecDirect)
- 无法使用 Oracle ODBC 执行查询
- 非常长的查询执行使用c++, Sql Server和ODBC连接
- QODBCResult::exec: 无法执行语句:"[Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误