conn.GetSchema查找表的主键 - MsAccess

时间:2017-09-04 05:22:22

标签: .net database vb.net ms-access oledb

我有一个位于D盘中的MsAccess数据库( .mdb )为( D:\ project.mdb )。 数据库有超过120个表。有一个表记录,它有主键和多个字段。我想获得Columns,ColumnType和PrimaryKey。

我使用以下方式获取字段及其类型:

.386
.model flat,stdcall
option casemap:none

PUBLIC Finished
PUBLIC ExitProcess

include     \masm32\include\windows.inc
include     \masm32\include\kernel32.inc
include     \masm32\include\msvcrt.inc

includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\msvcrt.lib

.data
   _title db "Result",13,10,0
   $interm db "%0.4f","+","%0.5f",13,10,0


.code

Finished:  




   invoke sprintf, addr szBuf, offset $interm, eax, edx
   invoke MessageBoxA, 0, addr szBuf, offset _title, 0
   invoke ExitProcess, 0

END

但它没有PrimayKey Column。

我经历了几个SO帖子和其他像GetSchema and PrimaryKey column这样的帖子。但是我想要创建一个命令和Reader来读取密钥。

有没有办法只使用conn.GetSchema获取表记录的PrimayKey列?

2 个答案:

答案 0 :(得分:2)

您可以使用Connection.GetOleDbSchemaTable并传递PrimaryKeys SchemaGuid。 对TableName应用限制为:

DataTable2 = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, New String() {Nothing, Nothing, TableNm_}) 
For Each TableRow As DataRow In DataTable2.Rows
    If TableRow.Item("PK_NAME").ToString.ToLower = "PrimaryKey".ToLower Then
        Dim  PrimaryKey = TableRow.Item("COLUMN_NAME")
        Dim Ordinal = CShort(TableRow.Item("ORDINAL"))
    End If
Next

答案 1 :(得分:0)

您可以使用SQL Fiddle I used

中的DatabaseSchema
using(var cn = new OleDbConnection("MS Access Connection String"))
{  
  DatabaseSchema schema = DatabaseSchemaLoader.Default.LoadSchema(cn);
  Assert.IsFalse(schema.Tables["Person"].Columns["Id"].AllowNull);
}

包含有关表格,列,索引等的信息