2009-03-19 6 views
3

各列のautoincrementプロパティを照会することによって、プライマリキー[identity column]を確立するためにデータテーブルを照会しようとしています。しかし、常にその偽(Idenity/PKである列に対して)。datatableプライマリキーがわからない

テーブルの主キーコレクションを照会すると、データテーブルにはPKがないと判断されます。

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

のDataTableが移入されている.......

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/

私が想定しています何かシンプルな私は行方不明、誰かが私を啓発して気にしていますか?

答えて

9

fillschemaを使用すると問題が解決します。

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

DataAdapterオブジェクトは、デフォルトでは読み取り専用のシナリオに を最適化されています。 Fillメソッドは、 DataSetオブジェクトを作成するために必要なスキーマの量を だけ取得します。 、 に DataSetオブジェクトを更新するか検証する必要 ある追加のスキーマを取得するデータセットの 以下のいずれかの方法を使用することが DataAdapaterによって取り込まれ オブジェクト:

  • データアダプターのFillSchema方法を使用し。
  • DataAdapterのMissingSchemaActionプロパティ にAddWithKey列挙を使用します。

この資料では、更新可能なデータセットにデータアダプターと オブジェクトを移入したい ときに、これらの2つの方法の間 を選択する方法について説明します。

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

0

autoincrementプロパティからプライマリキーを決定する必要がありますか?またはこれがあなたを助けることができますか?

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 
+0

試してみてください。プライマリキーのdatacolumnコレクションは空です。 それは私の問題の要点です。空です。 SQLテーブルには、有効なPK/ID列があります。 – GordonB

-1

トップ5ベンダーのためにこれと追加のメタデータを提供し、ライブラリ、Kailua - The forgotten methods in the ADO.NET API.は、あります。この情報はベンダー固有です。

+0

簡単なコードサンプルはどうですか? –

関連する問題