2011-11-10 18 views
0

新しい行IDを取得しようとすると、私はどこからでも見て、他の人にとってはうまくいくような共通のソリューションを試しました。データベースを変更することはできませんが、パラメータVersionIDがスコープIDで設定されていることはわかります。私もそれは常に-1を返します。しかし、私は新しい行のIDを取得することができないように挿入イベントObjectDataSource.Insertは常に-1を返します

protected void VersionDataSource_Inserted(object sender, ObjectDataSourceStatusEventArgs e) 
{ 
    int returnValue = (int)e.OutputParameters; 

} 

でこれを入れて試してみましたSPの最後の行は、リターン(@@ VERSIONID)ですが、私は試してみましたパラメータDirectionとreturnValueを作成します。総損失で、この一口を費やしてしまった。

<asp:Parameter Direction="Output" Name="VersionID" Type="Int32" /> 

付:

+0

どのようにデータソースに値を挿入しますか? – user194076

答えて

0

あなたがマークアップを投稿していないが、あなたは、出力パラメータとして定義されたパラメータを持つべきであるのOutputParametersが辞書で、私は

int returnValue = (int)e.OutputParameters["VersionID"].Value; 
+0

値が有効な選択肢ではありません、私は(int)e.OutputParameters ["VersionID"]を試して、nullを持っています。私はSQLでそれをトレースし、それが正しいIDを返すことをスキップしました。根本的な問題は、メソッドが返されていると思われる影響を受ける行数-1は、rowcountがSQLでfalseに設定されることを意味します。真面目に飲みに行くよ! – Contristo

+0

バージョンIDがprocで設定されていますか? –

+0

INSERT INTOは... ものがここに SET @@ VERSIONID = SCOPE_IDENTITY() END私はちょうど私も必要とされるであろう変更するのか分からないということ、それを見て、DB変更することはできませんで吹く パート。 – Contristo

0

を示唆しているようです上記のように出力値を得ることができるはずです:

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e) 
{ 
    int id = Convert.ToInt32(e.Command.Parameter["VersionID"].Value); 
} 
+0

マークアップでパラメータを追加しましたが、sqlDataSourceではありません。既存のストアドプロシージャをベースにしたObjectDataSourceです。 – Contristo

+0

これは問題ありません。それはまだ同じ型のパラメータなので、実際には違いはありません。なぜあなたは 'ObjectDataSource'を使用していますか? EFなどを使っていますか? –

+0

正直なところ、私は前回の仕事でデータソースを使用したことがなかったので、私は従来の修正をしていました...ボスがオブジェクトを使用するように言ったので、オブジェクトを使用しました... – Contristo

関連する問題