问题
C++中如何使用ODBC连接SQL Server数据库,参考我的这篇:
https://blog.csdn.net/lishenluo/article/details/107045918博文
ODBC SQLExecDirect
当执行sql语句函数SQLExecDirect时,返回RETCODE只知道是执行成功还是失败,如果失败,需要调用另一个函数来获取失败信息。
代码
调用代码片段
try
{
ret = SQLExecDirect(m_hStatement, (SQLCHAR*)csql, strlen(csql));
}
catch (...)
{
LLogError("Execute sql error, sql="<<sql<<",handle statement:"<<m_hStatement);
return -1;
}
if (ret == SQL_SUCCESS_WITH_INFO || ret == SQL_ERROR)//有异常的情况,获取异常信息
{
executeSqlErrorMsgRecv("selectData");
}
失败信息获取函数
void executeSqlErrorMsgRecv(const string& from)
{
SQLLEN numRecs = 0;
SQLGetDiagField(SQL_HANDLE_STMT, m_hStatement, 0, SQL_DIAG_NUMBER, &numRecs, 0, 0);
SQLSMALLINT i = 1, MsgLen;
SQLCHAR SqlState[6], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
while (i <= numRecs && (SQLGetDiagRec(SQL_HANDLE_STMT, m_hStatement, i, SqlState, &NativeError, Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA)
{
std::cout<<from<<" error,msg:" << Msg<<std::endl;
++i;
}
}
结语
错误信息还是很有用的。在SQLExecDirect返回SQL_SUCCESS_WITH_INFO 或 SQL_ERROR的时候使用哈。