2012-03-26 16 views
4

Visual C#プログラムに挿入するときに最後に挿入されたIDを取得したいとします。挿入/更新クエリから最後に挿入されたIDの戻り値を取得

// Insert to database 
try 
{ 

    int result = int.Parse(tblClipManagerTableAdapter.InsertQuery(textBox2.Text, textBox1.Text).ToString()); 
    MessageBox.Show(result.ToString()); 
} 
catch (Exception ex) { 
    MessageBox.Show("Fejl: " + ex.Message.ToString()); 
} 

エラー:「オブジェクト参照がオブジェクトのインスタンスに設定されていません」。

tblClipManagerTableAdapter.InsertQuery実行モードをスカラーに設定しました。

現在のコードと設定で最後に挿入されたIDを返す方法についてのヘルプはありますか?

ローカルSQLデータベース(dbClipManager.sdf)を使用します。


EDIT

敬具私は私が使用できる何かを見つけたと思います。

しかし、私はこれに非常に新しいです。コードを完全に書く方法がわからない? これは、接続を開くのではなく、データセットを使用するために使用され、SQL cmdsを実行します。 :O/

http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/1d1d3267-dc29-470b-bb20-00487a39bc87/

敬具

答えて

4

あり、あなたのアプローチにはいくつかの問題があるので、私はあなたがtable adapter and make sure that you've got the basics downのを通じて迅速な読み取りを行うことをお勧めしたいです。

  1. 新しいレコードを追加しようとしている場合、あなたはTableAdapter.Insertを呼ぶべきである、ないTableAdapter.Update
  2. は、データベースへの2番目のコマンドを作成して、以前にいたIDを取り戻すために@@IDENTITYを使用することはできませんこれは同じセッション内で返されなければなりません。さもなければ、SQLはあなたが受け取ることを期待しているIDを知らないでしょう。
  3. 表アダプターの実行モードをスカラーに設定すると、IDはメソッド呼び出しの戻り値になります。 Please see this Question and Answer on the same issue that you're experiencing.

EDIT: Please see this walk-through for what you're trying to accomplish.

+1

も、SQL Server 2000で使用すると、@@ IDを使用しないでください。 – HLGEM

+1

@HLGEMあなたは正しいです...ありがとう。私は何らかの理由で2005年に 'SCOPE_IDENITY()'が追加されたと思っていましたが、2000年に追加されました。 –

+0

@MichaelFredrickson非常に迅速な答えをありがとうございます。 UPDATE/INSERTの不一致を申し訳ありません。私は私の質問を編集しました。 私は今、テーブルアダプター(tblClipManagerTableAdapter.InsertQuery)の実行モードをスカラーに設定しました。 try/catchにも同じエラーが表示されます。 どこにSCOPE_IDENTITY()を挿入しますか? – user1281991

関連する問題