1
BGREX.BGREXDataTable _bRexDataTable = new BGREX.BGREXDataTable();
BGREX.BGREXRow bgRexRow = _bRexDataTable.NewBGREXRow();

bgRexRow.BGRes_TITLE = "abc";
bgRexRow.BGRes_VERSION = 123;

_bRexDataTable.AddBGREXRow(bgRexRow);
int rewEffected = Adapter.Update(_bRexDataTable);

上記を使用してデータベースにレコードを挿入しましたが、完璧に機能します。ここで、影響を受けた行が返されるのではなく、自動生成された新しく挿入されたレコードの ID (主キー) が必要です。

Adapter.Update(_bRexDataTable);

SCOPE_IDENTITY() 関数が必要なようですが、デザイナーが実際の挿入クエリに次の構文を追加することに満足していないため、これをデザイナーのどこに含めるかわかりません。ただし、sqlserver管理コンソールでは問題なく動作します

DECLARE @ROWI_D int

INSERT INTO TABLE
.....
.....
.....         
VALUES
("val1","val2",.......................)

SET ROW_ID = SCOPE_IDENTITY()
4

2 に答える 2

2

コマンドでSQLステートメントを使用してこれを行う方法がわかりません。私はそれができないと言っているのではありません。常にsprocsを介して、ステートメントを操作することはありません。

SCOPE_IDENTITY()ストアド プロシージャを使用することで、sproc で等しい値に設定できる出力パラメーターを定義し、そのパラメーターをコマンドに渡して、その方向を出力として設定することができます。

申し訳ありませんが、直接SQL呼び出しの解決策はありませんが、この方法で作業した経験のある他の誰かが参加するかもしれません.

これは、この同じトピックと考えられる回答について説明しているスレッドへのリンクです。しかし、提案された解決策が機能したかどうかの検証はありません。

于 2009-12-04T22:03:30.253 に答える
1

これを行う最善の方法は、パラメーターで必要な値を返すストアド プロシージャに変更することです。現在持っている更新を行うためのコードを投稿してください。私 (または他の誰か) が、ストアド プロシージャを使用するようにリファクタリングする方法を示します。難しいことではありません。

于 2009-12-05T01:15:11.777 に答える