最新の挿入 ID を返す asp.net InsertCommand
-
18-09-2019 - |
質問
asp.NET の型付きデータセットを使用して、SQL Server 2000 データベースから最後に挿入された ID を取得できません
テーブルアダプターを作成し、「データテーブルを更新」と「挿入、更新、および削除ステートメントを生成」にチェックを入れました。これにより、Fill メソッドと GetData メソッド、および Insert、Update、Select、および Delete ステートメントが自動生成されます。
このスレッドで考えられるすべての解決策を試しました
http://forums.asp.net/t/990365.aspx
しかし、私はまだ成功していません。常に 1 (= 影響を受ける行の数) を返します。自動生成された insertCommand が私のニーズに完全に適合しているため、個別の挿入メソッドを作成したくありません。
上記のスレッドで提案されているように、InsertCommand SQL 構文を更新して SELECT SCOPY_IDENTITY() または同様のものを追加しようとしました。ReturnValue 型のパラメーターを追加しようとしましたが、取得されるのは影響を受ける行の数だけです。
これについて別の見解を持っている人はいますか?前もって感謝します!ステイン
解決
私は正常に私のテーブルアダプタを使用して挿入した後、増分IDを取得する方法を発見します。
私のアプローチは少し異なっている、私は挿入を行うためにストアプロシージャを使用していますので、私のinsertコマンドはすべての値が、IDを持って、私はspはちょうど呼び出しIDを返す作っ: SETする@ ID = SCOPE_IDENTITY() その後 TRANをCOMMIT そして最後の行は次のようになります RETURN @ID
それから私は、idフィールドに、戻り値を入れて自動的に実行されますのでとき、InsertCommandはのための私のテーブルアダプタのパラメータを検索し、テーブルの増分IDの列に@RETURNVALUEを設定します。
このヘルプを願っています。
他のヒント
私はこの上の任意のより多くの時間を無駄にする余裕がない、あきらめることにしました。 私は、インサートのIDをhgetするために、私は選択MAX(ID)クエリを実行された後、Insert文を使用します。
誰もが解決策を持っている必要がある場合は、私はここでそれを読むことを喜んでいるよ。
のおかげで Stijn
更新/挿入操作後にデータテーブルを更新するようにテーブルのテーブルアダプターに伝える必要があります。これがその方法です。
のプロパティを開きます TableAdapter -> デフォルトの選択クエリ -> 高度なオプション. 。のオプションにチェックを入れます データテーブルを更新する. 。今すぐアダプターを保存します。ここで、table-adapter で update を呼び出すと、 データテーブルは更新/挿入操作後に更新[リフレッシュ]されます データベース テーブルの最新の値が反映されます。 主キーまたは列が自動インクリメントに設定されている場合、データテーブルには最近の更新後の最新の値が含まれます。
これで、更新を TableAdapterObj.Update(ds.dataTable) として呼び出すことができます。
DataTable(ds.dataTable) 列から最新の値を読み取り、更新/挿入前に子テーブルにそれぞれの値を割り当てます。. 。これは希望どおりに機能します。