0

最後に挿入された ID をデータベースから取得しようとしています。さまざまなコード スニペットを試しましたが、まだうまくいきません。挿入に使用しているコードは次のとおりです。2番目にnIdとして挿入するには、最初の挿入IDが必要です。SELECT @@IDENTITY を試してみましたが、null 値のエラーが表示され、見つけられませんでした。誰でも正しいコードを教えてもらえますか?

// Insert new user
daUsers.Insert(textBoxUsername.Text, textBoxPassword.Text);

// Insert new Twitter OAuth
daTwitterOAuth.Insert(nId, textBoxConsumerKey.Text, textBoxConsumerSecret.Text, textBoxToken.Text, textBoxTokenSecret.Text);
4

3 に答える 3

1

新しいレコードを追加しようとしている場合は、TableAdapter.Update ではなく、TableAdapter.Insert を呼び出す必要があります。データベースに対して 2 番目のコマンドを作成し、@@IDENTITY を使用して以前に生成された ID を取得することはできません。 . これは同じセッション内で返される必要があります。そうしないと、SQL はどの ID を受け取ることを期待しているのかわかりません。テーブル アダプターの実行モードをスカラーに設定すると、ID はメソッド呼び出しの戻り値になります。発生している同じ問題について、この Q &A を参照してください。

于 2013-02-08T14:08:30.677 に答える
0

もう行った!上記のコードでは、挿入メソッドを使用し、実行モードをスカラーに変更しました。これが私の sql です。

INSERT INTO [dbTblUsers]([strUsername], [strPassword])
VALUES (@p1,@p2);
SELECT @@IDENTITY;

@@identity を int にキャストするにはどうすればよいですか? このような?

nId = (int)daUsers.InsertQuery(textBoxUsername.Text, textBoxPassword.Text);
于 2013-02-08T14:44:04.593 に答える
0

@@Identityどちらが良いか誰かが言及していますが、その行に到達する前に他の誰かが別の場所で挿入を実行した場合はどうなりSQLますか?

私はこれをします。

Create Procedure [Proc]

@Id as int output = 0

as

Insert into Table
Select * from AnotherTable

SET @Id = (SELECT Scope_Identity)

次に、.NET出力パラメーターを追加します。

于 2013-02-08T14:15:37.460 に答える