为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:8.1 【操作系统】:windows 【CPU】:inter x86 【问题描述】*:c++ DPI连接达梦是否支持和mysql_insert_id一样的方法? 在程序员手册里面找不到,只有PHP编程那块有一个dm_insert_id。但是c++不支持这个方法。
达梦数据库中提供了LAST_INSERT_ID函数,可以获取插入的自增列的值,因此可以自行封装个函数,将查询到的LAST_INSERT_ID结果返回,代码如下 DPIRETURN dm_insert_id() { ulength row_num; sdint2 c1 = 0; slength c1_ind = 0; rt = dpi_alloc_stmt(hcon, &hstmt); DPIRETURN_CHECK(rt,DSQL_HANDLE_DBC,hcon); rt = dpi_exec_direct(hstmt, "select LAST_INSERT_ID from dual;"); DPIRETURN_CHECK(rt,DSQL_HANDLE_STMT,hstmt); DPIRETURN_CHECK(dpi_bind_col(hstmt, 1, DSQL_C_UBIGINT, &c1, sizeof(c1), &c1_ind), DSQL_HANDLE_STMT, hstmt); rt=dpi_fetch(hstmt, &row_num) ; DPIRETURN_CHECK(rt,DSQL_HANDLE_STMT,hstmt); //释放语句句柄 rt = dpi_free_stmt(hstmt); DPIRETURN_CHECK(rt,DSQL_HANDLE_STMT,hstmt); printf("dm insert id success\n"); return c1;
达梦数据库中提供了LAST_INSERT_ID函数,可以获取插入的自增列的值,因此可以自行封装个函数,将查询到的LAST_INSERT_ID结果返回,代码如下
DPIRETURN dm_insert_id()
{
ulength row_num;
sdint2 c1 = 0;
slength c1_ind = 0;
rt = dpi_alloc_stmt(hcon, &hstmt);
DPIRETURN_CHECK(rt,DSQL_HANDLE_DBC,hcon);
rt = dpi_exec_direct(hstmt, "select LAST_INSERT_ID from dual;");
DPIRETURN_CHECK(rt,DSQL_HANDLE_STMT,hstmt);
DPIRETURN_CHECK(dpi_bind_col(hstmt, 1, DSQL_C_UBIGINT, &c1, sizeof(c1), &c1_ind), DSQL_HANDLE_STMT, hstmt);
rt=dpi_fetch(hstmt, &row_num) ;
DPIRETURN_CHECK(rt,DSQL_HANDLE_STMT,hstmt);
//释放语句句柄
rt = dpi_free_stmt(hstmt);
DPIRETURN_CHECK(rt,DSQL_HANDLE_STMT,hstmt);
printf("dm insert id success\n");
return c1;