【问题标题】:DataColumn's AutoIncrement Returns False AlwaysDataColumn 自动增量总是返回 False
【发布时间】:2013-10-22 11:28:04
【问题描述】:

我有兴趣检查列是否具有 autoincrement/allowdbnull 属性。

下面有这段代码,虽然我已经有一个具有 autoincrement/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

谢谢。

【问题讨论】:

    标签: vb.net oledb datacolumn


    【解决方案1】:

    要使您的代码正常工作,您只需添加(在调用Fill 方法之前)

      dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
    

    这将强制适配器检索有关主键和自动编号字段的信息

    MSDN MissingSchemaAction enumeration

    【讨论】:

    • 不错。应该提到这会减慢您的数据库调用速度,因此不应定期执行此操作。如果您需要定期执行此操作,请在单独的过程中执行一次,询问记录“where 1=2”,然后在整个地方使用它,而不是在每个选择命令中调用它。
    • @Steve(我喜欢自言自语-:))您的观察是正确的。添加模式信息会减慢数据检索的速度,因此不是定期要做的事情。但是,这是一个本地访问 MDB,因此性能损失应该不会很差。待测试。
    • @Steve,非常感谢:) 有没有办法获得列 ?column.DataType.ToString 的“EXACT”dataTpe?当我说“EXACT”时,我的意思是获取本网站中提到的特定类型的字段/列:link,因为对于不同的类型,例如备忘录和文本->我都得到 System.String。谢谢
    • 尝试发布一个新问题,与在此处添加评论相比,您可以在新问题上获得更多关注。不过我可以给你一个提示:OleDbDataReader.GetSchemaTable()
    【解决方案2】:
    ds = new dataset()
    
    dataAdapter.Fill(ds,0,1,"Teachers")
    
    dataAdapter.FillSchema(ds, SchemaType.Source, "Teachers");
    
    dt = ds.tables(0)
    

    【讨论】:

      猜你喜欢
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-11-05
      • 2018-11-05
      • 2019-05-06
      • 2017-04-29
      相关资源
      最近更新 更多