ODBC API事务的问题
代码如下,链接数据库是可以的,现在的问题是按照一些资料里的事务设置不起作用(红色部分),第2个插入语句失败,第1个还是会成功,请教高手是哪里的错误,谢谢~
int main()
{
string sql;
SQLRETURN sr;
char dsn[]=ODBCDSN;
char uid[]=USRID;
char pid[]=PWD;
//环境设置
SQLHANDLE hdbenv;
sr = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hdbenv);
if(SQL_SUCCESS != sr)
{
cout << "SQL_HANDLE_ENV FAIL" << endl;
return 1;
}
else
{
cout << "SQL_HANDLE_ENV SUCCESS" << endl;
}
SQLSetEnvAttr(hdbenv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
//连接设置
SQLHANDLE hdbconn;
sr = SQLAllocHandle(SQL_HANDLE_DBC, hdbenv, &hdbconn);
sr = SQLSetConnectAttr(hdbconn, SQL_ATTR_LOGIN_TIMEOUT, (void *)10, 0);
sr = SQLSetConnectAttr(hdbconn, SQL_AUTOCOMMIT, (SQLPOINTER) SQL_AUTOCOMMIT_OFF, SQL_IS_POINTER);
sr = SQLConnect(hdbconn, (UCHAR *) dsn,SQL_NTS, (UCHAR *) uid,SQL_NTS, (UCHAR *) pid,SQL_NTS);
if (!SQL_SUCCEEDED(sr)) //连接失败时返回错误值
{
cout << "SQLConnect FAIL" << endl;
return 1;
}
else
{
cout << "SQLConnect SUCCESS" << endl;
}
//语句设置
SQLHSTMT hdbsql;
sr = SQLAllocHandle(SQL_HANDLE_STMT, hdbconn, &hdbsql);
sql = "insert into ModifyInfo(TableName, KeyName, KeyValue, Operation) values('yuyou', 'yuyou', '1', 1);";
sr=SQLExecDirect(hdbsql, (SQLCHAR*)sql.c_str(), SQL_NTS);
if (sr!=SQL_SUCCESS)
{
cout << "Error on Insert \n" << endl;
sr = SQLEndTran(SQL_HANDLE_DBC, hdbconn, SQL_ROLLBACK);
return 1;
}
else
{
cout << " Insert Data OK!\n" << endl;
}
sql = "insert into ModifyInfo(ID, TableName, KeyName, KeyValue, Operation) values(178, 'yuyou', 'yuyou', '1', 2);";
sr=SQLExecDirect(hdbsql, (SQLCHAR*)sql.c_str(), SQL_NTS);
if (sr!=SQL_SUCCESS)
{
cout << "Error on Insert \n" << endl;
sr = SQLEndTran(SQL_HANDLE_DBC, hdbconn, SQL_ROLLBACK);
return 1;
}
else
{
cout << " Insert Data OK!\n" << endl;
}
sr = SQLEndTran(SQL_HANDLE_DBC, hdbconn, SQL_COMMIT);
if(SQL_SUCCESS != sr)
{
cout << "SQL_COMMIT FAILED" << endl;
sr = SQLEndTran(SQL_HANDLE_DBC, hdbconn, SQL_ROLLBACK);
return 1;
}
else
{
cout << "SQL_COMMIT SUCCESS" << endl;
}
SQLFreeHandle(SQL_HANDLE_STMT, hdbsql);
SQLDisconnect(hdbconn);
SQLFreeHandle(SQL_HANDLE_DBC, hdbconn);
SQLFreeHandle(SQL_HANDLE_ENV, hdbenv);
return 0;
}