データベーステーブルを更新するためにdatatable、selectクエリを使用する汎用更新機能があります。正常に動作しています。私は、下のコードで何かを変更することによって、挿入された行のID(アイデンティティフィールド)を取得する方法があるかどうかを知る必要があります。ADO.Netデザイナウィザードなしで行のROW IDを挿入する
Public Function UpdateDataTable_GetID(ByVal dt As DataTable, ByVal SQL As String, ByVal connString As String) As Integer
Dim conn As SqlConnection = Nothing
Dim cmd As SqlCommand
Dim adp As SqlDataAdapter = Nothing
Dim cmdBuilder As SqlCommandBuilder = Nothing
Dim UpdatedID As Integer
If SQL.Length <= 0 Then
Return False
End If
conn = New Data.SqlClient.SqlConnection(connString)
cmd = New Data.SqlClient.SqlCommand
cmd.Connection = conn
cmd.CommandText = SQL
cmd.CommandType = CommandType.Text
adp = New Data.SqlClient.SqlDataAdapter(cmd)
cmdBuilder = New Data.SqlClient.SqlCommandBuilder(adp)
Try
UpdatedID = Convert.ToInt32(adp.Update(dt)) ' What to do here to get the just inserted ID instead of number of records updated
adp.Dispose()
cmdBuilder.Dispose()
Return UpdatedID
Catch ex As System.Data.SqlClient.SqlException
' Closing connection
Return -1
Finally
End try
End function
I)は、(私はデザイナーを使用してだけでなく、アダプタのInsertCommandはテキストを編集してからは、ExecuteScalarをやっデータアダプターのクエリのINSERTコマンドに「select scope_identity()
」を追加することができますここでの解決策を知っています。私は汎用アダプタ.Update()
が挿入された行のIDを取得するために調整できるかどうかを知りたい。
:私はあなたにもスコープIDを追加する事が容易になりSqlCommandBuilderを使用して気づきました。そこでは、e.StatementType == StatementType.Insertを調べることができます。そうであれば、そこに新しいIDが存在する可能性があります。私はこれを好きでしたが、最初にselect scope_identityを追加しましたので、それがなくても動作するかどうかわかりません。 – GuidoG
@GuidoGこの関数はクラスライブラリの一部であり、フォームではないため、イベントを購読できません。ここでコマンドオブジェクトを編集してscope_identityを得る方法はありますか?誰も私はデザイナーベースのソリューションではなく、コード内のアダプタの挿入コマンドを更新する方法を提案することができます。 –