1

このコードを実行すると、テーブルに存在しない他のフィールドも取得されます。どうすればこれを克服できますか?

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.Id

...そしてさらに6つ。元のスキーマは 5 つのフィールドのみで構成されています。

4

2 に答える 2

0

テーブルの行をループする前に、dataTable の有効な/永続的な列を特定する必要があります。

これを行うには、最初にデータテーブル オブジェクトの列コレクションを参照する必要があります。これらの列のそれぞれのプロパティを確認することで、一時的なものを特定できます。DataColumn オブジェクトの「拡張プロパティ」のどこかに隠されている可能性があると思います。

適切なプロパティを識別するために、次のようなことを行います (オンザフライで書かれています ...):

For each tableColumn as DataColumn in dt.Columns
    Console.WriteLine(tableColumn.[propertyName].ToString())
    ...
Next

列が元のテーブル フィールドの一部であるかどうかを知らせるプロパティがどれか正確にはわかりません。それを見つけるには、推測してテストする必要があります。それが識別されると、コンボボックスに追加する行を選択する方法がわかります。

于 2015-12-28T09:28:34.453 に答える