我正在一个名为eselinq的Google Code项目中为.NET和LINQ编写ESE适配器.我似乎无法弄清楚的一个重要功能是如何获取为表定义的索引列表.我需要能够列出可用的索引,以便LINQ部分可以自动确定何时可以使用索引.如果可以找到适当的索引,这将允许更有效的用户查询计划.
查询索引信息有两个相关的功能:
JetGetTableIndexInfo- 通过tableID获取索引信息JetGetIndexInfo- 通过tableName获取索引信息这些仅在指定相关表的方式(name或tableid)方面有所不同.听起来这些会支持我想要的功能,但所有的信息级别似乎都要求我已经有一个索引来查询信息.唯一的例外是JET_IdxInfoCount,但这仅计算存在多少索引.
JET_IdxInfo它JET_INDEXLIST听起来似乎有道理,但它只列出了特定索引上的列.
我知道我可以用另一种方式获取索引信息,例如对应于数据库表的.NET类型的注释,或者要求提前提供索引映射.我认为已经实施了足够的内省,以使其他所有内容无需用户提供额外信息即可开箱即用,除了这一功能.
另一种选择可能是检查系统表以查找相关的索引对象,但这意味着取决于未记录的接口.
为了满足这个问题,我想要一个支持的方法来枚举表上的索引(只是名称就足够了).
您对JetGetTableIndexInfo和JetGetIndexInfo以及JET_IdxInfo是正确的.扭曲的是,数据的返回有点复杂:返回一个临时表,其中包含索引的行,然后是表中每列的行.要获取索引名称,您需要跳过列行(列数由第一行中columnidcColumn列的值给出).
有关如何解密此问题的.NET示例,请查看ManagedEsent项目.在MetaDataHelpers.cs文件中,有一个名为GetIndexInfoFromIndexlist的方法,它从临时表中提取所有数据.
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |