我需要一个代码示例。我想看看如何在表中枚举列名。(我必须使用esent.dll/esent.lib和C语言)
我试着使用附加的代码(找到了一个指南,但它并不像我期望的那样工作)。
JET_COLUMNLIST column_info;
JET_RETRIEVECOLUMN j_rc[4];
err = JetGetTableColumnInfo(sessionID, curr_table.tableID, NULL, &column_info, sizeof(JET_COLUMNLIST), JET_ColInfoList);
j_rc[0].columnid = column_info.columnidcolumnname;
j_rc[0].cbData = sizeof(char)*JET_cbNameMost;
j_rc[0].itagSequence = 1;
j_rc[0].grbit = 0;
char buf[JET_cbNameMost] = { 0 };
j_rc[0].pvData = buf;
printf("\nRetrieving columns information:\n");
printf("Row\tId\tType\tName:\n");
unsigned long columns_qnt = 0;
for (err = JetMove(sessionID, curr_table.tableID, JET_MoveFirst, 0);
JET_errSuccess == err;
err = JetMove(sessionID, curr_table.tableID, JET_MoveNext, 0))
{
err = JetRetrieveColumns(sessionID, curr_table.tableID, j_rc, 4);
columns_qnt++;
printf("%u\t%s\n", columns_qnt, buf);
memset(buf, 0, JET_cbNameMost);
}
请举个例子。如果您知道ESEC编程的好指南或只是一些描述其工作原理的资源,请与我分享。(尽管我在谷歌上搜索了很多,但不要羞于分享对你来说显而易见的资源)
最佳答案
内部表“MysObjts”(在每个ESE数据库中都作为服务表存在)是2个对美国列的交织:“类型”和“名称”。
JetOpenTable(sessionID, dbid, "MSysObjects", NULL, NULL, JET_bitTableSequential, &tableID);
JET_COLUMNBASE j_cb_name, j_cb_type, j_cb_coltype;
JetGetColumnInfo(sessionID, dbid, "MSysObjects", "Name", &j_cb_name, sizeof(JET_COLUMNBASE), JET_ColInfoBase);
JetGetColumnInfo(sessionID, dbid, "MSysObjects", "Type", &j_cb_type, sizeof(JET_COLUMNBASE), JET_ColInfoBase);
JET_RETRIEVECOLUMN j_rc[2];
在这里,我们填充结构JET_RETRIEVECOLUMN以通过jetretrievcolumns获得这两个列
j_rc[0].columnid = j_cb_name.columnid;
j_rc[0].cbData = 1024;
j_rc[0].itagSequence = 1;
j_rc[0].grbit = NULL;
char buf[1024] = { 0 };
j_rc[0].pvData = buf;
j_rc[1].columnid = j_cb_type.columnid;
j_rc[1].cbData = sizeof(unsigned short);
j_rc[1].itagSequence = 1;
j_rc[1].grbit = NULL;
unsigned short type;
j_rc[1].pvData = &type;
for (err = JetMove(sessionID, root_tableID, JET_MoveFirst, 0);
JET_errSuccess == err;
err = JetMove(sessionID, root_tableID, JET_MoveNext, 0))
{
JetRetrieveColumns(sessionID, root_tableID, j_rc, 2);
我们找到他们了。如果type==1,这意味着我们得到的记录描述的是一个表,如果type==2,那么它描述的是一个列。(也有其他类型)有严格的顺序,首先您将得到类型1(表)的记录,然后您将得到类型2的记录,这些记录描述了该表的列(此时buf保留列名),然后您可以得到引用该表的其他类型(type==1除外)的记录。最后,您将得到类型1的记录,这意味着我们得到的下一个信息是关于另一个表的。
}
可以说我的英语很糟糕,我写了一些垃圾,我会试着用另一种方式来解释:)
关于c - 如何使用C语言和esent.lib在ESE中读取表中的列名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57030792/