为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8 WIN64
【操作系统】:WIN 2012
【CPU】: I7 第8代
【问题描述】*:
我在CENTIOS 环境写一个demo先调用dpi_get_data返回-1
f(!DSQL_SUCCEEDED(rt = dpi_number_columns(*m_hRes,&nColums)))
{
return rt;
}
for (int ColumIndex = 1; ColumIndex <= nColums; ++ColumIndex)
{
sdbyte szColumsName[64+1] = {0};
//列名长
sdint2 nColumLen = 0;
//列字段类型
sdint2 nSqltype = -1;
//列内容大小
ulength col_sz = 0;
//指向返回列的小数位数的缓冲区的指针
sdint2 dec_digits = 0;
//指向返回列是否允许为空的缓冲区的指针
sdint2 nullable = 0;
if(!DSQL_SUCCEEDED(rt = dpi_desc_column(*m_hRes,ColumIndex,szColumsName,sizeof(szColumsName)-1,
&nColumLen,&nSqltype,&col_sz,&dec_digits,&nullable)))
{
return rt;
}
sdbyte szColumsValue[64+1] = {0};
sdint2 chr_attr_len = 0;
slength num_attr = 0;
if(!DSQL_SUCCEEDED(rt = dpi_get_data(
*m_hRes,
ColumIndex,
nSqltype,
szColumsValue,
64,
&num_attr
)))
{
return rt; //此处返回值为-1,上午测试成功过,下午测试是返回了-1 ,使用WINDOWS 服务管理启动DM实例没起作用
}
to_upper((char*)const_cast<signed char*>(szColumsName));
DMSQL_SQLFIELD_NSAMESPACE::CSQLField field(std::string((char*)const_cast<signed char*>(szColumsName),nColumLen),
ColumIndex,nSqltype,col_sz,dec_digits,nullable);
m_SQLFIELD.insert(std::make_pair(field.GetName(), field));
}
return DSQL_SUCCESS;
}
请看代码注释!!!
能把直接可以跑起来的源码文件,可能会回复的快一点;这里应该是报错了,可能得具体执行看看日志。