예제 #1
0
파일: oratest.c 프로젝트: fm4dd/edacs
/* print error and exit with failure */
void do_error_exit(sqlo_db_handle_t dbh, const char * file,
                                 int line, const char * msg) {
  printf("%s (line: %d):\n%s: %s\n", file, line, msg, sqlo_geterror(dbh));
  sqlo_rollback(dbh);
  sqlo_finish(dbh);
  exit(EXIT_FAILURE);
}
예제 #2
0
파일: xdb.cpp 프로젝트: dx01259/libxsp
int execute(struct libdb *dbp, const char *qcmd)
{
	if (!is_open(dbp) && !open(dbp))
	{
		return 0;
	}
	int result = 0;
	switch (dbp->db_type)
	{
	case DB_ORACLE:
		{
			int ret;
			ret = sqlo_prepare(dbp->db_orap->ora_dbhp, qcmd);
			if (ret < 0)
			{
				set_error_d(dbp, "sqlo_prepare");
				result = 0;
				break;
			}
			void *param_addr = NULL;
			ret = sqlo_bind_by_name(dbp->db_orap->ora_dbhp, ":1", SQLOT_STR, param_addr, 64, NULL, 0);
			if (SQLO_SUCCESS != ret)
			{
				set_error_d(dbp, "sqlo_bind_by_name");
				result = 0;
				break;
			}
			ret = sqlo_execute(dbp->db_orap->ora_dbhp, 1);
			if (SQLO_SUCCESS != ret)
			{
				set_error_d(dbp, "sqlo_execute");
				result = 0;
				break;
			}
			ret = sqlo_commit(dbp->db_orap->ora_dbhp);
			if (SQLO_SUCCESS != ret)
			{
				sqlo_rollback(dbp->db_orap->ora_dbhp);
				result = 0;
				break;
			}
			result = 1;
		}
		break;
	case DB_MYSQL:
		{
			MYSQL_RES *tmp = NULL;
			int ret = -1;
			unsigned long len = strlen(qcmd);
			ret = mysql_real_query(dbp->db_sqlp->mys_sqlp, qcmd, len);
			if (0 != ret)
			{
				result = 0;
				set_error_d(dbp, "mysql_query");
				break;
			}
			//Although needs no results, but still need to call the following two API function
			tmp = mysql_use_result(dbp->db_sqlp->mys_sqlp);
			if (NULL == tmp)
			{
				result = 0;
				set_error_d(dbp, "mysql_use_result");
				break;
			}
			mysql_free_result(tmp);
			ret = mysql_commit(dbp->db_sqlp->mys_sqlp);
			if (0 != ret)
			{
				result = 0;
				mysql_rollback(dbp->db_sqlp->mys_sqlp);
			}
			tmp = NULL;
			result = 1;
		}
		break;
	default:
		{
			result = 0;
			set_error_d(dbp,"the database type is not supported");
		}
		break;
	}
	return result;
}