2013-10-14 8 views
2

Мне интересно узнать, имеет ли столбец свойство автоинкремента/allowdbnull.AutoIncrement DataColumn возвращает False Всегда

Имея этот код ниже, всегда имеет значение false, хотя у меня уже есть один столбец с свойством автоинкремента/allowdbnull.

Dim dt As New DataTable() 
Dim con As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" &    Application.StartupPath & "\test.mdb" 
Dim sql As String = "SELECT * from teachers" 
Dim i As Integer 



Dim dataAdapter As New OleDb.OleDbDataAdapter(sql, con) 
dataAdapter.Fill(dt) 
dataAdapter.Dispose() 



For Each column As DataColumn In dt.Columns 

TextBox1.Text = TextBox1.Text & column.ColumnName & "  " & column.AutoIncrement & "  " & column.AllowDBNull & vbCrLf 

Next 

спасибо.

ответ

7

Чтобы сделать код работу, которую нужно добавить (перед вызовом Fill метода) просто

dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey 

Это заставит адаптер для получения информации о первичных ключах и Autonumber полого

MSDN MissingSchemaAction enumeration

+0

Nice. Следует отметить, что это замедлит работу вашей базы данных, поэтому это не должно делаться на регулярной основе. Если вам это нужно на регулярной основе, сделайте это один раз в отдельном процессе, запросив записи «где 1 = 2», а затем просто используйте его повсюду, а не вызывайте его с каждой командой выбора. – Steve

+0

@Steve (мне нравится разговаривать сам с собой - :)), ваше наблюдение правильное. Добавление информации о схеме замедляет извлечение данных, поэтому не стоит делать это на обычной базе. Однако это MDB с локальным доступом, поэтому удар производительности должен быть не очень плохим. Для проверки. – Steve

+0

@Steve, большое спасибо :) Есть ли способ получить «EXACT» dataTpe столбца? Column.DataType.ToString? , когда я говорю «EXACT», я хочу получить конкретный тип поля/столбца, как указано здесь, на этом сайте: [ссылка] (http://www.w3schools.com/ado/ado_datatypes.asp) потому что для разных типов, таких как Memo & Text -> я получаю System.String для обоих. спасибо – eawedat

0
ds = new dataset() 

dataAdapter.Fill(ds,0,1,"Teachers") 

dataAdapter.FillSchema(ds, SchemaType.Source, "Teachers"); 

dt = ds.tables(0)