ODBC API事务的问题

yuyoucuobei 2009-03-16 11:43:46
代码如下,链接数据库是可以的,现在的问题是按照一些资料里的事务设置不起作用(红色部分),第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;
}
...全文
147 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chin_chen 2009-03-16
  • 打赏
  • 举报
回复
目前正在学习数据库。帮你up,一起学习
yuyoucuobei 2009-03-16
  • 打赏
  • 举报
回复
额,自己顶一下

另外,该程序是在linux下编译运行的,网上的资料实在有限,找不到相应的事务的代码
chin_chen 2009-03-16
  • 打赏
  • 举报
回复
我知道现在c++用的比较多的是ole。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧