Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何检索实际OleDb表架构(不包括其他表列)_Vb.net_Ms Access_Oledb_Getschema - Fatal编程技术网

Vb.net 如何检索实际OleDb表架构(不包括其他表列)

Vb.net 如何检索实际OleDb表架构(不包括其他表列),vb.net,ms-access,oledb,getschema,Vb.net,Ms Access,Oledb,Getschema,当我运行这段代码时,它还检索表中不存在的一些其他字段。我怎样才能克服这个问题 Dim conn As New OleDb.OleDbConnection 'Create a connection string for an Access database Dim strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\check\a.mdb" 'Attach the connection string to

当我运行这段代码时,它还检索表中不存在的一些其他字段。我怎样才能克服这个问题

Dim conn As New OleDb.OleDbConnection
'Create a connection string for an Access database
Dim strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\check\a.mdb"
'Attach the connection string to the connection object
conn.ConnectionString = strConnectionString
'Open the connection
conn.Open()
Dim Restrictions() As String = {Nothing, Nothing, selected, Nothing}
Dim CollectionName As String = "Columns"
Dim dt As DataTable = conn.GetSchema(CollectionName, Restrictions)
For Each TableRow As DataRow In dt.Rows
    ComboBox1.Items.Add(TableRow.Item("COLUMN_NAME"))
还检索到的其他列包括:

1.ID
2.日期创建
3.日期更新
4.Id
5.Lv
6.名称
7.家长Id
8.类型
9.GUID
10.身份证


。。。还有6个。原始模式仅由5个字段组成。

在表行上循环之前,您需要标识dataTable的有效/永久列

为此,应首先浏览datatable对象的columns集合。通过检查,您将能够识别临时的。我猜它可能隐藏在DataColumn对象的“扩展属性”中的某个地方

为了确定正确的属性,您将经历以下过程(动态写入…):


如果列是原始表字段的一部分,我不知道哪一个属性会让您知道。你必须猜测和测试才能找到它。一旦确定了它,您就知道如何选择要添加到组合框中的行。

您的问题很简单,当您将变量
插入
Restrictions()
数组时,所选变量
具有值
Nothing
。当我运行以下代码时,我只得到名为[new]的表的列名:

选项严格打开
导入System.Data.OleDb
模块1
副标题()
Dim connStr As字符串=
“Provider=Microsoft.ACE.OLEDB.12.0;”&
“数据源=C:\Users\Public\test\so34490626\a.mdb”
将conn用作新的OLEDB连接(connStr)
康涅狄格州公开赛
Dim选择为String=“new”
Dim Restrictions()作为字符串={Nothing,Nothing,selected,Nothing}
Dim CollectionName为String=“Columns”
Dim dt As DataTable=conn.GetSchema(集合名称,限制)
对于每个TableRow作为dt.行中的DataRow
Console.WriteLine(TableRow.Item(“列名称”))
下一个
终端使用
端接头
端模块
结果是:

性别
RISHI PRASAD成员
萨达克的名字
职业
但是,当选择的
值为
无时

Dim选择为字符串=无
。。。我得到了你描述的“额外”栏目

DateCreate
日期更新
身份证件
吕
名称
父ID
类型
属性
数据类型
字段名
索引类型
SkipColumn
SpecID
开始
宽度
达特德利姆
日期四位数年
日期前导零
日期顺序
分点
场分离器
档案类型
SpecID
SpecName
SpecType
斯塔特罗
TextDelim
蒂梅德里姆
性别
RISHI PRASAD成员
萨达克的名字
职业
如果我更改控制台.WriteLine以包括表名,则会显示原因:

Console.WriteLine(“[{0}].[{1}]”,TableRow.Item(“表名”),TableRow.Item(“列名”))
然后我们看到:

[MSysAccessStorage].[DateCreate]
[MSysAccessStorage]。[DateUpdate]
[MSysAccessStorage]。[Id]
[MSYSACCESS存储][Lv]
[MSysAccessStorage]。[Name]
[MSYSACCESS存储][ParentId]
[MSYSACCESS存储][类型]
[MSysIMEXColumns].[Attributes]
[MSysIMEXColumns].[DataType]
[MSysIMEXColumns]。[FieldName]
[MSysIMEXColumns].[IndexType]
[MSysIMEXColumns]。[SkipColumn]
[MSysIMEXColumns].[SpecID]
[MSysIMEXColumns].[Start]
[MSysIMEXColumns]。[宽度]
[MSysIMEXSpecs]。[DateDelim]
[MSysIMEXSpecs]。[DateFourDigitYear]
[MSysIMEXSpecs]。[DateLeadingZeros]
[MSysIMEXSpecs]。[DateOrder]
[MSysIMEXSpecs]。[DecimalPoint]
[MSysIMEXSpecs]。[FieldSeparator]
[msysimexpecs].[FileType]
[MSysIMEXSpecs]。[SpecID]
[MSysIMEXSpecs]。[SpecName]
[MSysIMEXSpecs]。[SpecType]
[msysimexpecs]。[StartRow]
[MSysIMEXSpecs]。[TextDelim]
[MSysIMEXSpecs]。[TimeDelim]
[新][性别]
[新][RISHI PRASAD成员]
[新][萨达克的名字]
[新][专业]

“MSys*”表是默认情况下在Access用户界面中隐藏的系统表。

您在何处定义了“selected”及其值?Slected保存从另一个ComboboxBox中选择的表名。您可以解释一下在GetSchema返回的表中看到的这些其他临时字段是什么吗也被重新审理了。1.ID 2.Date create 3.Date update 4.ID 5.Lv 6.Name 7.parent ID 8.Type 9.GUID 10.ID和are 6个以上,原始模式仅为5个字段这很奇怪,似乎您有多个表的混合。尝试更改您的ComboBox1.Items.Add以添加由“column_NAME”列和“TABLE_NAME”列中的值组成的字符串(很抱歉,但我应该确定:在调用之前是否清除了ComboboxItems集合?),代码、大陆、国家名称和人口非常感谢☺ 戈德汤普森
For each tableColumn as DataColumn in dt.Columns
    Console.WriteLine(tableColumn.[propertyName].ToString())
    ...
Next