我有一个位于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列?
答案 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);
}
包含有关表格,列,索引等的信息