数据表不知道它的主键

时间:2009-03-19 14:19:21

标签: vb.net ado.net

我正在尝试通过查询每个列的autoincrement属性来查询数据表以建立主键[identity column]。然而,它始终是假的(对于Idenity / PK的列)。

查询表主键集显示数据表不认为它具有PK。;

  Dim dc As DataColumn() = dt.PrimaryKey
  Debug.WriteLine(dc.Count)  'Result is 0

正在填充数据表.......

Using cn As SqlConnection = MyApp.GetConnection
  Using cmd As New SqlCommand(strSQL, cn)
    Using da As New SqlDataAdapter(cmd)
      Dim ds As New DataSet
      Try
        da.Fill(ds)

        Return ds

      Catch ex As Exception
        MyAppClass.LogWarning(ex, EventLogEntryType.Error)
        Throw
      End Try
    End Using 
  End Using 
End Using

有问题的表的主键是:([myTableId] [int] IDENTITY(1,1)NOT NULL)。 及其pk:CONSTRAINT [PK_myTablesPK] PRIMARY KEY CLUSTERED([myTableId] ASC)

这里有人有同样的问题(也许比我写的更清楚):http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/c6abdeef-0cb0-42f5-a5f1-10dc4d81df4a/

我假设我缺少一些简单的东西,是否有人关心启发我?

3 个答案:

答案 0 :(得分:9)

使用fillschema修复了我的问题;

da.FillSchema(ds, SchemaType.Mapped, table.tableName)
da.Fill(ds, table.tableName)
  

DataAdapter对象已经过优化   默认情况下为只读方案。   Fill方法仅检索   必要的架构数量   填充DataSet对象。获得   附加的架构   更新或验证所必需的   DataSet对象,使用其中之一   以下DataSet对象的方法   这是由谁填充   DataAdapater:

     
      
  • 使用DataAdapter的FillSchema方法。
  •   
  • 对MissingSchemaAction属性使用AddWithKey枚举   DataAdapter。
  •   
     

本文介绍如何选择   当你这两种方法之间   想要填充可更新的DataSet   使用DataAdapter的对象。

REF : http://support.microsoft.com/kb/310128

答案 1 :(得分:0)

您是否需要从自动增量属性中确定主键?或者这对你有帮助吗?

Private Sub GetPrimaryKeys ( myTable As DataTable )
   ' create the array for the columns.
   Dim colKeys ( ) As DataColumn = myTable.PrimaryKey
   ' get the number of elements in the array.
   Response.Write ( "Column Count: " & colKeys.Length.ToString ( ) )
   Dim i As Integer
   For i = 0 To colKeys.GetUpperBound ( 0 )
      Response.Write ( colKeys ( i ).ColumnName & _
         colKeys ( i ).DataType.ToString ( ) )
   Next i
End Sub

答案 2 :(得分:-1)

有一个库Kailua - The forgotten methods in the ADO.NET API. ,它为前5个供应商提供了这个和其他元数据。此信息是特定于供应商的。